diff options
Diffstat (limited to 'daemon/gvfsbackend.c')
-rw-r--r-- | daemon/gvfsbackend.c | 39 |
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) { |