diff options
author | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2008-04-09 21:20:19 +0000 |
---|---|---|
committer | Luiz Augusto von Dentz <luiz.dentz@openbossa.org> | 2008-04-09 21:20:19 +0000 |
commit | a1c12f0ffeeb1bd2ab9cb287ce4e16125492c521 (patch) | |
tree | e8244c02547390f68694b24b00a4d8d1fb4657f8 | |
parent | 3d9966f38f1d6ca12c9e9e2eace5181ba04844b4 (diff) |
Fix temporary device removal not emitting DeviceRemoved.
-rw-r--r-- | hcid/adapter.c | 37 | ||||
-rw-r--r-- | hcid/adapter.h | 3 | ||||
-rw-r--r-- | hcid/dbus-hci.c | 8 |
3 files changed, 29 insertions, 19 deletions
diff --git a/hcid/adapter.c b/hcid/adapter.c index 12e92695..269476ec 100644 --- a/hcid/adapter.c +++ b/hcid/adapter.c @@ -2306,6 +2306,28 @@ struct device *adapter_get_device(DBusConnection *conn, return device; } +void adapter_remove_device(DBusConnection *conn, struct adapter *adapter, + struct device *device) +{ + char path[MAX_PATH_LENGTH]; + bdaddr_t src; + + str2ba(adapter->address, &src); + delete_entry(&src, "profiles", device->address); + delete_entry(&src, "linkkey", device->address); + + snprintf(path, MAX_PATH_LENGTH, "/hci%d", adapter->dev_id); + + dbus_connection_emit_signal(conn, path, + ADAPTER_INTERFACE, + "DeviceRemoved", + DBUS_TYPE_OBJECT_PATH, &device->path, + DBUS_TYPE_INVALID); + + device_remove(device, conn); + adapter->devices = g_slist_remove(adapter->devices, device); +} + static gboolean create_bonding_conn_complete(GIOChannel *io, GIOCondition cond, struct adapter *adapter) { @@ -3734,7 +3756,6 @@ static DBusHandlerResult remove_device(DBusConnection *conn, DBusMessage *reply; const char *path; GSList *l; - bdaddr_t src; if (dbus_message_get_args(msg, NULL, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID) == FALSE) @@ -3751,19 +3772,7 @@ static DBusHandlerResult remove_device(DBusConnection *conn, if (!reply) return DBUS_HANDLER_RESULT_NEED_MEMORY; - str2ba(adapter->address, &src); - delete_entry(&src, "profiles", device->address); - delete_entry(&src, "linkkey", device->address); - - dbus_connection_emit_signal(conn, - dbus_message_get_path(msg), - ADAPTER_INTERFACE, - "DeviceRemoved", - DBUS_TYPE_OBJECT_PATH, &device->path, - DBUS_TYPE_INVALID); - - device_remove(device, conn); - adapter->devices = g_slist_remove(adapter->devices, device); + adapter_remove_device(conn, adapter, device); return send_message_and_unref(conn, reply); } diff --git a/hcid/adapter.h b/hcid/adapter.h index 3449aec4..9a40ed4b 100644 --- a/hcid/adapter.h +++ b/hcid/adapter.h @@ -118,6 +118,9 @@ struct device *adapter_get_device(DBusConnection *conn, struct device *adapter_find_device(struct adapter *adapter, const char *dest); +void adapter_remove_device(DBusConnection *conn, struct adapter *adapter, + struct device *device); + const char *major_class_str(uint32_t class); const char *minor_class_str(uint32_t class); diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index e27df03f..0a06138a 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -2055,11 +2055,9 @@ void hcid_dbus_disconn_complete(bdaddr_t *local, uint8_t status, device->path, DEVICE_INTERFACE, "Connected", DBUS_TYPE_BOOLEAN, &connected); - if (device->temporary) { - adapter->devices = g_slist_remove(adapter->devices, - device); - device_remove(device, connection); - } + if (device->temporary) + adapter_remove_device(connection, adapter, + device); } } |