summaryrefslogtreecommitdiff
path: root/gdbus
diff options
context:
space:
mode:
authorHenrique Dante de Almeida <hdante@profusion.mobi>2013-05-27 14:15:34 -0300
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2013-05-28 16:22:27 +0300
commit6d4e7785a46b069d6575092b2ce783b80b9e253c (patch)
treef6fd99f86ae970fc138461167f0d823b4f4e44d8 /gdbus
parent232fa391e39db4c2b58914f67d33c387c93e3260 (diff)
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.
Diffstat (limited to 'gdbus')
-rw-r--r--gdbus/client.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gdbus/client.c b/gdbus/client.c
index f700b7ee4..d80e2523d 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);