diff options
Diffstat (limited to 'gdbus')
-rw-r--r-- | gdbus/watch.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gdbus/watch.c b/gdbus/watch.c index 42e158fe..75e42103 100644 --- a/gdbus/watch.c +++ b/gdbus/watch.c @@ -299,6 +299,8 @@ static struct filter_callback *filter_data_add_callback( static gboolean filter_data_remove_callback(struct filter_data *data, struct filter_callback *cb) { + DBusConnection *connection; + data->callbacks = g_slist_remove(data->callbacks, cb); data->processed = g_slist_remove(data->processed, cb); @@ -315,15 +317,17 @@ static gboolean filter_data_remove_callback(struct filter_data *data, if (data->registered && !remove_match(data)) return FALSE; + connection = dbus_connection_ref(data->connection); + listeners = g_slist_remove(listeners, data); + filter_data_free(data); + /* Remove filter if there are no listeners left for the connection */ - data = filter_data_find(data->connection, NULL, NULL, NULL, NULL, - NULL); + data = filter_data_find(connection, NULL, NULL, NULL, NULL, NULL); if (!data) - dbus_connection_remove_filter(data->connection, message_filter, + dbus_connection_remove_filter(connection, message_filter, NULL); - listeners = g_slist_remove(listeners, data); - filter_data_free(data); + dbus_connection_unref(connection); return TRUE; } |