Do not automatically remove watches for service names
authorLuiz Augusto Von Dentz <luiz.dentz-von@nokia.com>
Mon, 6 Sep 2010 10:26:19 +0000 (13:26 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 8 Sep 2010 16:28:23 +0000 (18:28 +0200)
Services can be owned again so it is perfectly fine to keep the watch.

gdbus/watch.c

index 29f23e2..b686c85 100644 (file)
@@ -386,18 +386,19 @@ static DBusHandlerResult service_filter(DBusConnection *connection,
                                cb->conn_func(connection, cb->user_data);
                }
 
+               /* Only auto remove if it is a bus name watch */
+               if (data->argument[0] == ':' &&
+                               (!cb->conn_func || !cb->disc_func)) {
+                       filter_data_remove_callback(data, cb);
+                       continue;
+               }
+
                /* Check if the watch was removed/freed by the callback
                 * function */
                if (!g_slist_find(data->callbacks, cb))
                        continue;
 
                data->callbacks = g_slist_remove(data->callbacks, cb);
-
-               if (!cb->conn_func || !cb->disc_func) {
-                       g_free(cb);
-                       continue;
-               }
-
                data->processed = g_slist_append(data->processed, cb);
        }