summaryrefslogtreecommitdiffstats
path: root/hcid
diff options
context:
space:
mode:
authorLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2008-04-09 21:20:19 +0000
committerLuiz Augusto von Dentz <luiz.dentz@openbossa.org>2008-04-09 21:20:19 +0000
commita1c12f0ffeeb1bd2ab9cb287ce4e16125492c521 (patch)
treee8244c02547390f68694b24b00a4d8d1fb4657f8 /hcid
parent3d9966f38f1d6ca12c9e9e2eace5181ba04844b4 (diff)
Fix temporary device removal not emitting DeviceRemoved.
Diffstat (limited to 'hcid')
-rw-r--r--hcid/adapter.c37
-rw-r--r--hcid/adapter.h3
-rw-r--r--hcid/dbus-hci.c8
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);
}
}