Report all dirty objects corrupted by each sandbox crash.
authorshort <>
Fri, 12 Sep 2003 19:43:34 +0000 (19:43 +0000)
committershort <>
Fri, 12 Sep 2003 19:43:34 +0000 (19:43 +0000)
src/libcaptive/client/parent-connector.h
src/libcaptive/client/vfs-parent.c

index 7640105..0ffcde3 100644 (file)
@@ -47,6 +47,7 @@ struct _CaptiveParentConnectorIface {
 
        GnomeVFSResult (*open)(CaptiveParentConnector *captive_parent_connector);
        GnomeVFSResult (*close)(CaptiveParentConnector *captive_parent_connector);
+       G_CONST_RETURN gchar *(*get_pathname)(CaptiveParentConnector *captive_parent_connector);
        };
 
 typedef enum captive_parent_connector_flag_want {
@@ -75,10 +76,18 @@ typedef enum captive_parent_connector_flag_want {
                CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ON,  /* vfs */ \
                CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_OFF, /* corba_object */ \
                CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ON   /* dirty */
-#define CAPTIVE_PARENT_CONNECTOR_FLAGS_DISCONNECTED_OR_CLOSED \
+#define CAPTIVE_PARENT_CONNECTOR_FLAGS_CLOSED_DIRTY_OR_OPENED_DIRTY \
+               CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ON,  /* vfs */ \
+               CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ANY, /* corba_object */ \
+               CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ON   /* dirty */
+#define CAPTIVE_PARENT_CONNECTOR_FLAGS_DISCONNECTED_OR_CLOSED_CLEAN \
                CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ANY, /* vfs */ \
                CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_OFF, /* corba_object */ \
                CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_OFF  /* dirty */
+#define CAPTIVE_PARENT_CONNECTOR_FLAGS_DISCONNECTED_OR_BROKEN_OR_CLOSED \
+               CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ANY, /* vfs */ \
+               CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_OFF, /* corba_object */ \
+               CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ANY  /* dirty */
 #define CAPTIVE_PARENT_CONNECTOR_FLAGS_OPENED \
                CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ON,  /* vfs */ \
                CAPTIVE_PARENT_CONNECTOR_FLAG_WANT_ON,  /* corba_object */ \
@@ -94,6 +103,7 @@ typedef enum captive_parent_connector_flag_want {
 
 void captive_parent_connector_init(CaptiveParentConnector *captive_parent_connector,
                        CORBA_Object *corba_objectp,CaptiveVfsParentObject *captive_vfs_parent_object);
+gboolean captive_parent_connector_dispose(CaptiveParentConnector *captive_parent_connector);
 void captive_parent_connector_finalize(CaptiveParentConnector *captive_parent_connector);
 GnomeVFSResult captive_parent_connector_connect(CaptiveParentConnector *captive_parent_connector);
 GnomeVFSResult captive_parent_connector_open(CaptiveParentConnector *captive_parent_connector);
index 734295d..8d6412d 100644 (file)
@@ -32,6 +32,7 @@ static gpointer captive_vfs_parent_object_parent_class=NULL;
 
 
 static GnomeVFSResult captive_vfs_parent_init(CaptiveVfsObject *captive_vfs_object);
+static void captive_vfs_parent_object_dispose(CaptiveVfsParentObject *captive_vfs_parent_object);
 static void captive_vfs_parent_object_handler_detach(CaptiveVfsParentObject *captive_vfs_parent_object);
 static void captive_vfs_parent_object_handler_cease(CaptiveVfsParentObject *captive_vfs_parent_object);
 static void captive_vfs_parent_object_handler_abort(CaptiveVfsParentObject *captive_vfs_parent_object);
@@ -41,12 +42,24 @@ static GnomeVFSResult captive_vfs_parent_volume_info_get
                (CaptiveVfsObject *captive_vfs_object,CaptiveVfsVolumeInfo *volume_info);
 
 
-static void captive_vfs_parent_object_finalize(CaptiveVfsParentObject *captive_vfs_parent_object)
+/* We need to close the filesystem during custom 'dispose'
+ * as the default GObject g_object_real_dispose() destroys all the signals
+ * first and we would not notify our Connectors during captive_vfs_parent_object_finalize().
+ */
+static void captive_vfs_parent_object_dispose(CaptiveVfsParentObject *captive_vfs_parent_object)
 {
        g_return_if_fail(captive_vfs_parent_object!=NULL);
 
        captive_vfs_parent_close(CAPTIVE_VFS_OBJECT(captive_vfs_parent_object));        /* errors ignored */
 
+       G_OBJECT_CLASS(captive_vfs_parent_object_parent_class)->dispose((GObject *)captive_vfs_parent_object);
+}
+
+
+static void captive_vfs_parent_object_finalize(CaptiveVfsParentObject *captive_vfs_parent_object)
+{
+       g_return_if_fail(captive_vfs_parent_object!=NULL);
+
        G_OBJECT_CLASS(captive_vfs_parent_object_parent_class)->finalize((GObject *)captive_vfs_parent_object);
 }
 
@@ -57,6 +70,7 @@ GObjectClass *gobject_class=G_OBJECT_CLASS(class);
 CaptiveVfsObjectClass *captive_vfs_object_class=CAPTIVE_VFS_OBJECT_CLASS(class);
 
        captive_vfs_parent_object_parent_class=g_type_class_ref(g_type_parent(G_TYPE_FROM_CLASS(class)));
+       gobject_class->dispose=(void (*)(GObject *object))captive_vfs_parent_object_dispose;
        gobject_class->finalize=(void (*)(GObject *object))captive_vfs_parent_object_finalize;
 
        captive_vfs_object_class->init=captive_vfs_parent_init;
@@ -168,7 +182,7 @@ GnomeVFSResult r;
        captive_vfs_parent_object=CAPTIVE_VFS_PARENT_OBJECT(captive_vfs_object);
 
        if (captive_vfs_parent_object->corba_Vfs_object!=CORBA_OBJECT_NIL) {
-               r=captive_sandbox_parent_vfs_close(captive_vfs_parent_object);
+               r=captive_vfs_parent_object_disconnect(captive_vfs_parent_object);
                g_assert(captive_vfs_parent_object->corba_Vfs_object==CORBA_OBJECT_NIL);
                }
        else