summaryrefslogtreecommitdiff
path: root/daemon/gvfsbackendarchive.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/gvfsbackendarchive.c')
-rw-r--r--daemon/gvfsbackendarchive.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/daemon/gvfsbackendarchive.c b/daemon/gvfsbackendarchive.c
index 24547441..50aa176c 100644
--- a/daemon/gvfsbackendarchive.c
+++ b/daemon/gvfsbackendarchive.c
@@ -73,6 +73,8 @@ struct _GVfsBackendArchive
G_DEFINE_TYPE (GVfsBackendArchive, g_vfs_backend_archive, G_VFS_TYPE_BACKEND)
+static void backend_unmount (GVfsBackendArchive *ba);
+
/*** AN ARCHIVE WE CAN OPERATE ON ***/
typedef struct {
@@ -237,7 +239,7 @@ g_vfs_backend_archive_finalize (GObject *object)
{
GVfsBackendArchive *archive = G_VFS_BACKEND_ARCHIVE (object);
- g_assert (archive->file == NULL);
+ backend_unmount (archive);
if (G_OBJECT_CLASS (g_vfs_backend_archive_parent_class)->finalize)
(*G_OBJECT_CLASS (g_vfs_backend_archive_parent_class)->finalize) (object);
@@ -589,17 +591,27 @@ do_mount (GVfsBackend *backend,
}
static void
+backend_unmount (GVfsBackendArchive *ba)
+{
+ if (ba->file)
+ {
+ g_object_unref (ba->file);
+ ba->file = NULL;
+ }
+ if (ba->files)
+ {
+ archive_file_free (ba->files);
+ ba->files = NULL;
+ }
+}
+
+static void
do_unmount (GVfsBackend *backend,
GVfsJobUnmount *job,
GMountUnmountFlags flags,
GMountSource *mount_source)
{
- GVfsBackendArchive *ba = G_VFS_BACKEND_ARCHIVE (backend);
-
- g_object_unref (ba->file);
- ba->file = NULL;
- archive_file_free (ba->files);
- ba->files = NULL;
+ backend_unmount (G_VFS_BACKEND_ARCHIVE (backend));
g_vfs_job_succeeded (G_VFS_JOB (job));
}