Diff between b58a6519b88584fced1e5c91e3786c2f574768e4 and 4963a4c6aed7610da3f6c5a69c5fadc51ceaafc4

Changed Files

File Additions Deletions Status
Makefile.am +3 -1 modified
src/adapter.c +30 -11 modified
src/adapter.h +1 -0 modified
src/main.c +5 -0 modified

Full Patch

diff --git a/Makefile.am b/Makefile.am
index bbaa4e0..aff19fb 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -142,7 +142,9 @@ src_bluetoothd_SOURCES = $(gdbus_sources) $(builtin_sources) \
 			src/profile.h src/profile.c \
 			src/device.h src/device.c src/attio.h \
 			src/dbus-common.c src/dbus-common.h \
-			src/eir.h src/eir.c src/mgmt.c src/mgmt.h
+			src/eir.h src/eir.c src/mgmt.c src/mgmt.h \
+			src/shared/util.h src/shared/util.c \
+			src/shared/mgmt.h src/shared/mgmt.c
 src_bluetoothd_LDADD = lib/libbluetooth-private.la @GLIB_LIBS@ @DBUS_LIBS@ \
 								-ldl -lrt
 src_bluetoothd_LDFLAGS = $(AM_LDFLAGS) -Wl,--export-dynamic \
diff --git a/src/adapter.c b/src/adapter.c
index 019e56d..61464e3 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -50,6 +50,8 @@
 #include "log.h"
 #include "textfile.h"
 
+#include "src/shared/mgmt.h"
+
 #include "hcid.h"
 #include "sdpd.h"
 #include "adapter.h"
@@ -86,6 +88,8 @@
 static GSList *adapters = NULL;
 static int default_adapter_id = -1;
 
+struct mgmt *mgmt = NULL;
+
 static const char *base_path = "/org/bluez";
 static GSList *adapter_drivers = NULL;
 
@@ -165,6 +169,8 @@ struct btd_adapter {
 	GSList *profiles;
 
 	struct oob_handler *oob_handler;
+
+	struct mgmt *mgmt;
 };
 
 static gboolean process_auth_queue(gpointer user_data);
@@ -3617,17 +3623,6 @@ void btd_adapter_for_each_device(struct btd_adapter *adapter,
 	g_slist_foreach(adapter->devices, (GFunc) cb, data);
 }
 
-void adapter_cleanup(void)
-{
-	while (adapters) {
-		struct btd_adapter *adapter = adapters->data;
-
-		adapter_remove(adapter);
-		adapters = g_slist_remove(adapters, adapter);
-		btd_adapter_unref(adapter);
-	}
-}
-
 static int adapter_cmp(gconstpointer a, gconstpointer b)
 {
 	struct btd_adapter *adapter = (struct btd_adapter *) a;
@@ -3733,3 +3728,27 @@ int adapter_unregister(int id)
 
 	return 0;
 }
+
+int adapter_init(void)
+{
+	mgmt = mgmt_new_default();
+	if (!mgmt)
+		return -EIO;
+
+	return 0;
+}
+
+void adapter_cleanup(void)
+{
+	while (adapters) {
+		struct btd_adapter *adapter = adapters->data;
+
+		adapter_remove(adapter);
+		adapters = g_slist_remove(adapters, adapter);
+		btd_adapter_unref(adapter);
+	}
+
+	mgmt_unregister_all(mgmt);
+	mgmt_unref(mgmt);
+	mgmt = NULL;
+}
diff --git a/src/adapter.h b/src/adapter.h
index d3adace..fe69166 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -74,6 +74,7 @@ struct smp_ltk_info {
 };
 
 void adapter_cleanup(void);
+int adapter_init(void);
 struct btd_adapter *adapter_find(const bdaddr_t *sba);
 struct btd_adapter *adapter_find_by_id(int id);
 struct btd_adapter *adapter_get_default(void);
diff --git a/src/main.c b/src/main.c
index 8c3570f..550d9bb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -517,6 +517,11 @@ int main(int argc, char *argv[])
 		exit(1);
 	}
 
+	if (adapter_init() < 0) {
+		error("adapter init failed");
+		exit(1);
+	}
+
 	btd_agent_init();
 	btd_profile_init();