gdbus: Fix issue with unref of client while parsing interfaces
authorMarcel Holtmann <marcel@holtmann.org>
Sun, 16 Dec 2012 00:06:33 +0000 (01:06 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 19 Dec 2012 02:43:28 +0000 (03:43 +0100)
gdbus/client.c

index 670f6a7..76e4cc1 100644 (file)
@@ -675,7 +675,11 @@ static void interfaces_added(GDBusClient *client, DBusMessage *msg)
        dbus_message_iter_get_basic(&iter, &path);
        dbus_message_iter_next(&iter);
 
+       g_dbus_client_ref(client);
+
        parse_interfaces(client, path, &iter);
+
+       g_dbus_client_unref(client);
 }
 
 static void interfaces_removed(GDBusClient *client, DBusMessage *msg)
@@ -697,6 +701,8 @@ static void interfaces_removed(GDBusClient *client, DBusMessage *msg)
 
        dbus_message_iter_recurse(&iter, &entry);
 
+       g_dbus_client_ref(client);
+
        while (dbus_message_iter_get_arg_type(&entry) == DBUS_TYPE_STRING) {
                const char *interface;
 
@@ -704,6 +710,8 @@ static void interfaces_removed(GDBusClient *client, DBusMessage *msg)
                proxy_remove(client, path, interface);
                dbus_message_iter_next(&entry);
        }
+
+       g_dbus_client_unref(client);
 }
 
 static void parse_managed_objects(GDBusClient *client, DBusMessage *msg)