Force sandbox commit on each 16MB read.
[captive.git] / src / libcaptive / client / file-parent.c
index 038bdc5..cf680b6 100644 (file)
@@ -348,6 +348,7 @@ static GnomeVFSResult captive_file_parent_read(CaptiveFileObject *captive_file_o
 CaptiveFileParentObject *captive_file_parent_object;
 GnomeVFSResult r;
 gint retried=0;
+gint retried_commit=0;
 
        g_return_val_if_fail(CAPTIVE_FILE_PARENT_IS_OBJECT(captive_file_object),GNOME_VFS_ERROR_BAD_PARAMETERS);
        g_return_val_if_fail(buffer!=NULL,GNOME_VFS_ERROR_BAD_PARAMETERS);
@@ -360,8 +361,17 @@ gint retried=0;
                if (GNOME_VFS_OK!=(r=captive_parent_connector_open(CAPTIVE_PARENT_CONNECTOR(captive_file_parent_object))))
                        return r;
                if (GNOME_VFS_ERROR_SERVICE_NOT_AVAILABLE
-                               !=(r=captive_sandbox_parent_file_read(captive_file_parent_object,buffer,num_bytes,bytes_read_return)))
+                               !=(r=captive_sandbox_parent_file_read(captive_file_parent_object,buffer,num_bytes,bytes_read_return))) {
+                       if (GNOME_VFS_ERROR_SERVICE_OBSOLETE==r) {
+                               if (!retried_commit++) {
+                                       if (GNOME_VFS_OK!=(r=captive_vfs_commit(captive_file_object->vfs)))
+                                               return r;
+                                       retried=0;
+                                       continue;
+                                       }
+                               }
                        return r;
+                       }
                } while (!retried++);
        return r;
 }