summaryrefslogtreecommitdiff
path: root/daemon/gvfsdaemon.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@src.gnome.org>2007-09-13 10:05:33 +0000
committerAlexander Larsson <alexl@src.gnome.org>2007-09-13 10:05:33 +0000
commit31d4339828403f9ec168aed05e912e2a66abb506 (patch)
tree055d387740912e10e0ba34340e35642e9b44d061 /daemon/gvfsdaemon.c
parentab9848d5f3fb96096d759caf1963e987e09cf801 (diff)
downloadgvfs-31d4339828403f9ec168aed05e912e2a66abb506.tar.gz
Get rid of peer-to-peer dbus connection on disconnect
Original git commit by Alexander Larsson <alex@localhost.localdomain> at 1163775665 +0100 svn path=/trunk/; revision=176
Diffstat (limited to 'daemon/gvfsdaemon.c')
-rw-r--r--daemon/gvfsdaemon.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/daemon/gvfsdaemon.c b/daemon/gvfsdaemon.c
index 4fd9cc31..02f0ae2e 100644
--- a/daemon/gvfsdaemon.c
+++ b/daemon/gvfsdaemon.c
@@ -61,6 +61,9 @@ static void daemon_unregistered_func (DBusConnection *conn,
static DBusHandlerResult daemon_message_func (DBusConnection *conn,
DBusMessage *message,
gpointer data);
+static DBusHandlerResult daemon_filter_func (DBusConnection *conn,
+ DBusMessage *message,
+ gpointer data);
static void start_or_queue_job (GVfsDaemon *daemon,
GVfsJob *job);
@@ -369,7 +372,8 @@ daemon_peer_connection_setup (GVfsDaemon *daemon,
}
dbus_connection_setup_with_g_main (dbus_conn, NULL);
- if (!dbus_connection_register_object_path (dbus_conn,
+ if (!dbus_connection_add_filter (dbus_conn, daemon_filter_func, daemon, NULL) ||
+ !dbus_connection_register_object_path (dbus_conn,
G_VFS_DBUS_DAEMON_PATH,
&daemon_vtable,
daemon))
@@ -738,6 +742,24 @@ daemon_message_func (DBusConnection *conn,
return DBUS_HANDLER_RESULT_HANDLED;
}
+static DBusHandlerResult
+daemon_filter_func (DBusConnection *conn,
+ DBusMessage *message,
+ gpointer data)
+{
+ if (dbus_message_is_signal (message,
+ DBUS_INTERFACE_LOCAL,
+ "Disconnected"))
+ {
+ /* The peer-to-peer connection was disconnected */
+ dbus_connection_unref (conn);
+ return DBUS_HANDLER_RESULT_HANDLED;
+ }
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
+
gboolean
g_vfs_daemon_is_active (GVfsDaemon *daemon)
{