summaryrefslogtreecommitdiff
path: root/daemon/gvfsbackend.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/gvfsbackend.c')
-rw-r--r--daemon/gvfsbackend.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/daemon/gvfsbackend.c b/daemon/gvfsbackend.c
index 0c84c150..fc65d825 100644
--- a/daemon/gvfsbackend.c
+++ b/daemon/gvfsbackend.c
@@ -994,6 +994,45 @@ g_vfs_backend_unmount_with_operation (GVfsBackend *backend,
}
+static void
+forced_unregister_mount_callback (GVfsDBusMountTracker *proxy,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GVfsDaemon *daemon;
+ GVfsBackend *backend;
+ GError *error = NULL;
+
+ g_return_if_fail (G_VFS_IS_BACKEND (user_data));
+
+ g_debug ("forced_unregister_mount_callback\n");
+ if (! gvfs_dbus_mount_tracker_call_unregister_mount_finish (proxy,
+ res,
+ &error))
+ {
+ g_dbus_error_strip_remote_error (error);
+ g_warning ("Error unregistering mount: %s (%s, %d)\n",
+ error->message, g_quark_to_string (error->domain), error->code);
+ g_error_free (error);
+ }
+
+ /* Unlink job source from daemon */
+ backend = G_VFS_BACKEND (user_data);
+ daemon = g_vfs_backend_get_daemon (backend);
+ g_vfs_daemon_close_active_channels (daemon, backend);
+ g_vfs_job_source_closed (G_VFS_JOB_SOURCE (backend));
+
+}
+
+void
+g_vfs_backend_force_unmount (GVfsBackend *backend)
+{
+ g_vfs_backend_set_block_requests (backend);
+ g_vfs_backend_unregister_mount (backend,
+ (GAsyncReadyCallback) forced_unregister_mount_callback,
+ backend);
+}
+
gboolean
g_vfs_backend_has_blocking_processes (GVfsBackend *backend)
{