diff options
author | Alexander Larsson <alexl@redhat.com> | 2009-03-13 13:09:19 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2009-03-13 13:09:19 +0000 |
commit | 0cb1b15911b93436ffe98f6ad903d4a48f6e8005 (patch) | |
tree | b10035992d50685df96f0300fcd120835cbf2aa2 | |
parent | 831988747f7ed76a319c272eb3ae442001aff81d (diff) | |
download | gvfs-0cb1b15911b93436ffe98f6ad903d4a48f6e8005.tar.gz |
Bug 563418 – gvfs backend leaks monitors
2009-03-13 Alexander Larsson <alexl@redhat.com>
Bug 563418 – gvfs backend leaks monitors
* daemon/gvfsmonitor.c:
(unsubscribe):
(vfs_monitor_message_callback):
Fix crashes when unsubscribing monitors.
svn path=/trunk/; revision=2322
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | daemon/gvfsmonitor.c | 8 |
2 files changed, 14 insertions, 3 deletions
@@ -1,5 +1,14 @@ 2009-03-13 Alexander Larsson <alexl@redhat.com> + Bug 563418 – gvfs backend leaks monitors + + * daemon/gvfsmonitor.c: + (unsubscribe): + (vfs_monitor_message_callback): + Fix crashes when unsubscribing monitors. + +2009-03-13 Alexander Larsson <alexl@redhat.com> + * daemon/daemon-main.c (daemon_parse_args): Enable debug output if GVFS_DEBUG is set in the environment. diff --git a/daemon/gvfsmonitor.c b/daemon/gvfsmonitor.c index df678039..4b91ecef 100644 --- a/daemon/gvfsmonitor.c +++ b/daemon/gvfsmonitor.c @@ -150,14 +150,13 @@ static void unsubscribe (GVfsMonitor *monitor, Subscriber *subscriber) { + monitor->priv->subscribers = g_list_remove (monitor->priv->subscribers, subscriber); + dbus_connection_unref (subscriber->connection); g_free (subscriber->id); g_free (subscriber->object_path); g_free (subscriber); g_object_unref (monitor); - - monitor->priv->subscribers = g_list_remove (monitor->priv->subscribers, subscriber); - } static DBusHandlerResult @@ -222,6 +221,7 @@ vfs_monitor_message_callback (DBusConnection *connection, } else { + g_object_ref (monitor); /* Keep alive during possible last remove */ for (l = monitor->priv->subscribers; l != NULL; l = l->next) { subscriber = l->data; @@ -238,6 +238,8 @@ vfs_monitor_message_callback (DBusConnection *connection, reply = dbus_message_new_method_return (message); dbus_connection_send (connection, reply, NULL); + + g_object_unref (monitor); } return DBUS_HANDLER_RESULT_HANDLED; |