summaryrefslogtreecommitdiffstats
path: root/hcid/dbus-database.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-06-08 13:49:39 +0000
committerMarcel Holtmann <marcel@holtmann.org>2008-06-08 13:49:39 +0000
commitc1f7605e7afb22c24f4b241afd36526e6181e7ef (patch)
tree6e3bb5a499ae838a046abec381aeb1f16aba6df4 /hcid/dbus-database.c
parent1008177538c7f2fac766d6144b7f653719c56328 (diff)
Fix missing disconnect watch id handling
Diffstat (limited to 'hcid/dbus-database.c')
-rw-r--r--hcid/dbus-database.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/hcid/dbus-database.c b/hcid/dbus-database.c
index e9df79b0..c6a689d2 100644
--- a/hcid/dbus-database.c
+++ b/hcid/dbus-database.c
@@ -75,6 +75,8 @@ static void exit_callback(void *user_data)
{
struct record_data *user_record = user_data;
+ debug("remove record");
+
records = g_slist_remove(records, user_record);
remove_record_from_server(user_record->handle);
@@ -150,6 +152,8 @@ static DBusMessage *add_service_record(DBusConnection *conn,
user_record,
NULL);
+ debug("listener_id %d", user_record->listener_id);
+
return g_dbus_create_reply(msg, DBUS_TYPE_UINT32, &user_record->handle,
DBUS_TYPE_INVALID);
}
@@ -180,8 +184,10 @@ int add_xml_record(DBusConnection *conn, const char *sender, bdaddr_t *src,
records = g_slist_append(records, user_record);
- g_dbus_add_disconnect_watch(conn, sender, exit_callback, user_record,
- NULL);
+ user_record->listener_id = g_dbus_add_disconnect_watch(conn, sender,
+ exit_callback, user_record, NULL);
+
+ debug("listener_id %d", user_record->listener_id);
*handle = user_record->handle;
@@ -320,18 +326,17 @@ int remove_record(DBusConnection *conn, const char *sender,
{
struct record_data *user_record;
+ debug("remove record 0x%x", handle);
+
user_record = find_record(handle, sender);
if (!user_record)
return -1;
- g_dbus_remove_watch(conn, user_record->listener_id);
+ debug("listner_id %d", user_record->listener_id);
- records = g_slist_remove(records, user_record);
-
- remove_record_from_server(handle);
+ g_dbus_remove_watch(conn, user_record->listener_id);
- g_free(user_record->sender);
- g_free(user_record);
+ exit_callback(user_record);
return 0;
}