Fixed SIGSEGV during close of GnomeVFSHandle reopened due to its timeout.
authorshort <>
Wed, 12 Nov 2003 06:25:26 +0000 (06:25 +0000)
committershort <>
Wed, 12 Nov 2003 06:25:26 +0000 (06:25 +0000)
src/install/acquire/cabinet.h
src/install/acquire/moduriload.c

index 59eeeda..5de7520 100644 (file)
@@ -36,7 +36,7 @@ struct acquire_cabinet {
        gpointer base;
        guint8 *base_cached;
        GnomeVFSFileOffset offset;
-       GnomeVFSHandle *handle;
+       GnomeVFSHandle **handlep;
        GnomeVFSFileSize size;
        const gchar *filename;
        GnomeVFSURI *uri;
@@ -58,7 +58,7 @@ GnomeVFSResult acquire_cabinet_read
 struct acquire_cabinet *acquire_cabinet_new_from_memory
                (gconstpointer file_base,size_t file_length,GnomeVFSURI *uri,gint cabinet_used);
 struct acquire_cabinet *acquire_cabinet_new_from_handle
-               (GnomeVFSHandle *handle,GnomeVFSFileInfo *file_info,GnomeVFSURI *uri,gint cabinet_used);
+               (GnomeVFSHandle **handlep,GnomeVFSFileInfo *file_info,GnomeVFSURI *uri,gint cabinet_used);
 void acquire_cabinet_free(struct acquire_cabinet *acquire_cabinet);
 void acquire_cabinet_load(struct acquire_cabinet *acquire_cabinet);
 
index 6b2d591..fed2307 100644 (file)
@@ -191,15 +191,16 @@ fail_free_file_buffer:
 }
 
 static void mod_uri_load_file_handle_remote_cabinet
-               (GnomeVFSHandle *handle,GnomeVFSFileInfo *file_info,GnomeVFSURI *uri,gint cabinet_used)
+               (GnomeVFSHandle **handlep,GnomeVFSFileInfo *file_info,GnomeVFSURI *uri,gint cabinet_used)
 {
 struct acquire_cabinet *acquire_cabinet;
 
-       g_return_if_fail(handle!=NULL);
+       g_return_if_fail(handlep!=NULL);
+       g_return_if_fail(*handlep!=NULL);
        g_return_if_fail(file_info!=NULL);
        g_return_if_fail(uri!=NULL);
 
-       acquire_cabinet=acquire_cabinet_new_from_handle(handle,file_info,uri,cabinet_used);
+       acquire_cabinet=acquire_cabinet_new_from_handle(handlep,file_info,uri,cabinet_used);
        /* acquire_cabinet_load() will call mod_uri_load_module_from_memory(): */
        acquire_cabinet_load(acquire_cabinet);
        acquire_cabinet_free(acquire_cabinet);
@@ -234,7 +235,7 @@ GnomeVFSHandle *handle;
        else {
 gint cabinet_used=captivemodid_cabinet_length_to_used(file_info_local.size);
 
-               mod_uri_load_file_handle_remote_cabinet(handle,&file_info_local,uri,cabinet_used);
+               mod_uri_load_file_handle_remote_cabinet(&handle,&file_info_local,uri,cabinet_used);
                }
        errvfsresult=GNOME_VFS_OK;
        /* PASSTHRU */