diff --git a/src/adapter.c b/src/adapter.c
index ce929ff..70b5e46 100644
--- a/src/adapter.c
+++ b/src/adapter.c
#include "adv_monitor.h"
#include "eir.h"
-#define ADAPTER_INTERFACE "org.bluez.Adapter1"
-
#define MODE_OFF 0x00
#define MODE_CONNECTABLE 0x01
#define MODE_DISCOVERABLE 0x02
diff --git a/src/adapter.h b/src/adapter.h
index 960a00c..11b93d2 100644
--- a/src/adapter.h
+++ b/src/adapter.h
#include <lib/bluetooth.h>
#include <lib/sdp.h>
+#define ADAPTER_INTERFACE "org.bluez.Adapter1"
+
#define MAX_NAME_LENGTH 248
/* Invalid SSP passkey value used to indicate negative replies */
diff --git a/src/device.c b/src/device.c
index 8f73ce4..3e77840 100644
--- a/src/device.c
+++ b/src/device.c
{
struct bearer_state *state = get_state(device, bdaddr_type);
DBusMessage *reply;
+ bool remove_device = false;
if (!state->connected)
return;
while (device->disconnects) {
DBusMessage *msg = device->disconnects->data;
+ if (dbus_message_is_method_call(msg, ADAPTER_INTERFACE,
+ "RemoveDevice"))
+ remove_device = true;
+
g_dbus_send_reply(dbus_conn, msg, DBUS_TYPE_INVALID);
device->disconnects = g_slist_remove(device->disconnects, msg);
dbus_message_unref(msg);
g_dbus_emit_property_changed(dbus_conn, device->path,
DEVICE_INTERFACE, "Connected");
+
+ if (remove_device)
+ btd_adapter_remove_device(device->adapter, device);
}
guint device_add_disconnect_watch(struct btd_device *device,
disconnect_all(device);
}
+ if (device->temporary_timer > 0)
+ g_source_remove(device->temporary_timer);
+
if (device->store_id > 0) {
g_source_remove(device->store_id);
device->store_id = 0;