diff options
author | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 10:05:33 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 10:05:33 +0000 |
commit | 31d4339828403f9ec168aed05e912e2a66abb506 (patch) | |
tree | 055d387740912e10e0ba34340e35642e9b44d061 | |
parent | ab9848d5f3fb96096d759caf1963e987e09cf801 (diff) | |
download | gvfs-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
-rw-r--r-- | daemon/gvfsdaemon.c | 24 |
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) { |