diff options
author | Ondrej Holy <oholy@redhat.com> | 2014-09-11 08:55:21 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2014-10-13 14:24:13 +0200 |
commit | db89e2908ec3da88472fd80aea20382692d48217 (patch) | |
tree | 006a6ca8b3a0b7d657a3f31cc83d75440bbe6ae4 /daemon/gvfsjobunmount.c | |
parent | 038f186fa471c1da1b5c72aaae7dca89aa098aa6 (diff) | |
download | gvfs-db89e2908ec3da88472fd80aea20382692d48217.tar.gz |
gvfsjobunmount: set error as per client interaction
If the dialog about blocking processes was cancelled,
G_IO_ERROR_FAILED_HANDLED will be returned. If there were outstanding
jobs and GMountOperation wasn't passed in, or "show-processes" signal
wasn't handled, G_IO_ERROR_BUSY will be returned.
https://bugzilla.gnome.org/show_bug.cgi?id=710986
Diffstat (limited to 'daemon/gvfsjobunmount.c')
-rw-r--r-- | daemon/gvfsjobunmount.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/daemon/gvfsjobunmount.c b/daemon/gvfsjobunmount.c index 205407cb..6da8d8bf 100644 --- a/daemon/gvfsjobunmount.c +++ b/daemon/gvfsjobunmount.c @@ -210,13 +210,19 @@ unmount_cb (GVfsBackend *backend, GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); gboolean should_unmount; gboolean finished; + GError *error = NULL; should_unmount = g_vfs_backend_unmount_with_operation_finish (backend, - res); - - if (should_unmount) - op_job->flags |= G_MOUNT_UNMOUNT_FORCE; + res, + &error); + if (!should_unmount) + { + g_vfs_job_failed_from_error (G_VFS_JOB (op_job), error); + g_error_free (error); + return; + } + op_job->flags |= G_MOUNT_UNMOUNT_FORCE; finished = job_finish_immediately_if_possible (op_job); if (! finished) @@ -247,13 +253,17 @@ try (GVfsJob *job) is_busy = g_vfs_daemon_has_blocking_processes (g_vfs_backend_get_daemon (backend)); force_unmount = op_job->flags & G_MOUNT_UNMOUNT_FORCE; - if (is_busy && ! force_unmount - && ! g_mount_source_is_dummy (op_job->mount_source)) + if (is_busy && !force_unmount) { - g_vfs_backend_unmount_with_operation (backend, - op_job->mount_source, - (GAsyncReadyCallback) unmount_cb, - op_job); + if (g_mount_source_is_dummy (op_job->mount_source)) + g_vfs_job_failed_literal (G_VFS_JOB (op_job), + G_IO_ERROR, G_IO_ERROR_BUSY, + _("File system is busy")); + else + g_vfs_backend_unmount_with_operation (backend, + op_job->mount_source, + (GAsyncReadyCallback)unmount_cb, + op_job); return TRUE; } |