*
* D-Bus helper library
*
- * Copyright (C) 2004-2009 Marcel Holtmann <marcel@holtmann.org>
+ * Copyright (C) 2004-2010 Marcel Holtmann <marcel@holtmann.org>
*
*
* This program is free software; you can redistribute it and/or modify
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);
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;
}