summaryrefslogtreecommitdiff
path: root/daemon/gvfsbackend.c
diff options
context:
space:
mode:
authorChristian Kellner <gicmo@gnome.org>2011-05-25 15:27:33 +0200
committerChristian Kellner <gicmo@gnome.org>2011-06-06 14:40:45 +0200
commit66bbe38a1329616e6313b6bd41b98e1b77d1306d (patch)
tree6b03ab22f3466cb7e5b9530ba2cecf6b091847b2 /daemon/gvfsbackend.c
parent08c4a19fc74d0ff9175203157229fed5d04fba07 (diff)
downloadgvfs-66bbe38a1329616e6313b6bd41b98e1b77d1306d.tar.gz
daemon: New logic to the backend to block requests
When the backend is set to block requests it will answer all incoming requets with G_IO_ERROR_NOT_MOUNTED. This will later be used by the unmount code to bridge the time while we are unregistering the mount but have not finished doing so.
Diffstat (limited to 'daemon/gvfsbackend.c')
-rw-r--r--daemon/gvfsbackend.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/daemon/gvfsbackend.c b/daemon/gvfsbackend.c
index ee321084..1c2fb8a6 100644
--- a/daemon/gvfsbackend.c
+++ b/daemon/gvfsbackend.c
@@ -80,6 +80,7 @@ struct _GVfsBackendPrivate
gboolean user_visible;
char *default_location;
GMountSpec *mount_spec;
+ gboolean block_requests;
};
@@ -509,6 +510,12 @@ g_vfs_backend_add_auto_info (GVfsBackend *backend,
}
+void
+g_vfs_backend_set_block_requests (GVfsBackend *backend)
+{
+ backend->priv->block_requests = TRUE;
+}
+
static DBusHandlerResult
backend_dbus_handler (DBusConnection *connection,
DBusMessage *message,
@@ -522,6 +529,21 @@ backend_dbus_handler (DBusConnection *connection,
g_debug ("backend_dbus_handler %s:%s\n",
dbus_message_get_interface (message),
dbus_message_get_member (message));
+
+ if (backend->priv->block_requests)
+ {
+ DBusMessage *reply;
+
+ reply = _dbus_message_new_gerror (message,
+ G_IO_ERROR,
+ G_IO_ERROR_NOT_MOUNTED,
+ "%s", "Backend currently unmounting");
+
+ g_assert (reply != NULL);
+
+ dbus_connection_send (connection, reply, NULL);
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
if (dbus_message_is_method_call (message,
G_VFS_DBUS_MOUNT_INTERFACE,