aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrique Dante de Almeida <hdante@profusion.mobi>2013-05-27 14:15:34 -0300
committerMarcel Holtmann <marcel@holtmann.org>2013-06-19 08:10:28 +0200
commitc8cd60621d5996c5660cf897e97675e424a5b0a2 (patch)
tree8ce89307ffbcebf18615fe6ef0065b003a053eca
parent936e7d205edae3d1c63b8720ea02e1ea5af32e0f (diff)
downloadmmsd-c8cd60621d5996c5660cf897e97675e424a5b0a2.tar.gz
gdbus: Remove proxies when client disconnects
Remove proxies and generate proxy_removed callbacks even when there are no corresponding InterfaceRemoved signals. This patch fixes having zombie gdbus proxy object when a server disconnects without sending InterfaceRemoved signals. These objects may interact with new server instances, for example, making InterfaceAdded signals of new objects with the same name be filtered out as duplicated, or staying allocated, but unused, if the new server doesn't reuse the object paths. Note that as a side-effect, the lifetime of a gdbus proxy becomes stricter: it lives at most for the duration of a single connection to a single instance of a server process.
-rw-r--r--gdbus/client.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gdbus/client.c b/gdbus/client.c
index f700b7e..d80e252 100644
--- a/gdbus/client.c
+++ b/gdbus/client.c
@@ -1153,6 +1153,10 @@ static DBusHandlerResult message_filter(DBusConnection *connection,
if (*new == '\0' && client->unique_name != NULL &&
g_str_equal(old, client->unique_name) == TRUE) {
+
+ g_list_free_full(client->proxy_list, proxy_free);
+ client->proxy_list = NULL;
+
if (client->disconn_func)
client->disconn_func(client->dbus_conn,
client->disconn_data);