+Workaround Linux kernel last device block inaccessibility.
[captive.git] / src / libcaptive / client / vfs-parent.c
index 8d6412d..40801ef 100644 (file)
@@ -40,6 +40,7 @@ static GnomeVFSResult captive_vfs_parent_close(CaptiveVfsObject *captive_vfs_obj
 static GnomeVFSResult captive_vfs_parent_commit(CaptiveVfsObject *captive_vfs_object);
 static GnomeVFSResult captive_vfs_parent_volume_info_get
                (CaptiveVfsObject *captive_vfs_object,CaptiveVfsVolumeInfo *volume_info);
+static GnomeVFSResult captive_vfs_parent_object_connect_silent(CaptiveVfsParentObject *captive_vfs_parent_object);
 
 
 /* We need to close the filesystem during custom 'dispose'
@@ -188,6 +189,11 @@ GnomeVFSResult r;
        else
                r=GNOME_VFS_OK;
 
+       if (captive_vfs_parent_object->corba_parent_giochanel_blind_source) {
+               g_io_channel_unref(captive_vfs_parent_object->corba_parent_giochanel_blind_source);
+               captive_vfs_parent_object->corba_parent_giochanel_blind_source=NULL;
+               }
+
        return r;
 }
 
@@ -204,7 +210,7 @@ gint retried=0;
 
        do {
                if (captive_vfs_parent_object->corba_Vfs_object==CORBA_OBJECT_NIL
-                               && GNOME_VFS_OK!=(r=captive_vfs_parent_object_connect(captive_vfs_parent_object)))
+                               && GNOME_VFS_OK!=(r=captive_vfs_parent_object_connect_silent(captive_vfs_parent_object)))
                        return r;
                if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
                                !=(r=captive_sandbox_parent_vfs_commit(captive_vfs_parent_object)))
@@ -248,6 +254,16 @@ GnomeVFSResult captive_vfs_parent_object_connect(CaptiveVfsParentObject *captive
 }
 
 
+static GnomeVFSResult captive_vfs_parent_object_connect_silent(CaptiveVfsParentObject *captive_vfs_parent_object)
+{
+       g_return_val_if_fail(CAPTIVE_VFS_PARENT_IS_OBJECT(captive_vfs_parent_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
+
+       g_return_val_if_fail(captive_vfs_parent_object->corba_Vfs_object==CORBA_OBJECT_NIL,GNOME_VFS_ERROR_BAD_PARAMETERS);
+
+       return captive_sandbox_parent_vfs_new_silent(captive_vfs_parent_object);
+}
+
+
 GnomeVFSResult captive_vfs_parent_object_disconnect(CaptiveVfsParentObject *captive_vfs_parent_object)
 {
 GnomeVFSResult r;