Diff between e501b00e025bf44cd8830046547fe8e114b0d6f6 and 9a7e2cc81cdea7a673a2cc29cd8eae43155122c0

Changed Files

File Additions Deletions Status
src/adapter.c +0 -2 modified
src/manager.c +8 -2 modified

Full Patch

diff --git a/src/adapter.c b/src/adapter.c
index df06d1d..e1b8d5d 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2580,8 +2580,6 @@ void adapter_remove(struct btd_adapter *adapter)
 
 	/* Return adapter to down state if it was not up on init */
 	adapter_ops->restore_powered(adapter->dev_id);
-
-	btd_adapter_unref(adapter);
 }
 
 uint16_t adapter_get_dev_id(struct btd_adapter *adapter)
diff --git a/src/manager.c b/src/manager.c
index a725588..464b0ca 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -291,6 +291,7 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
 			DBUS_TYPE_INVALID);
 
 	adapter_remove(adapter);
+	btd_adapter_unref(adapter);
 
 	if (adapters == NULL)
 		btd_start_exit_timer();
@@ -298,9 +299,14 @@ static void manager_remove_adapter(struct btd_adapter *adapter)
 
 void manager_cleanup(DBusConnection *conn, const char *path)
 {
-	g_slist_free_full(adapters, (GDestroyNotify) adapter_remove);
+	while (adapters) {
+		struct btd_adapter *adapter = adapters->data;
+
+		adapters = g_slist_remove(adapters, adapter);
+		adapter_remove(adapter);
+		btd_adapter_unref(adapter);
+	}
 
-	adapters = NULL;
 	btd_start_exit_timer();
 
 	g_dbus_unregister_interface(conn, "/", MANAGER_INTERFACE);