Diff between 6611b72600c370ec31795ab48a222594c4afb7ee and 48d8f08a54003c1526cb614d00a16c08b6471aef

Changed Files

File Additions Deletions Status
src/adapter.c +0 -2 modified
src/adapter.h +2 -0 modified
src/device.c +11 -0 modified

Full Patch

diff --git a/src/adapter.c b/src/adapter.c
index ce929ff..70b5e46 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -80,8 +80,6 @@
 #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
@@ -29,6 +29,8 @@
 #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
@@ -3007,6 +3007,7 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
 {
 	struct bearer_state *state = get_state(device, bdaddr_type);
 	DBusMessage *reply;
+	bool remove_device = false;
 
 	if (!state->connected)
 		return;
@@ -3036,6 +3037,10 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
 	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);
@@ -3061,6 +3066,9 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type)
 
 	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,
@@ -4482,6 +4490,9 @@ void device_remove(struct btd_device *device, gboolean remove_stored)
 		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;