diff mbox series

[BlueZ,v4,6/9] client: Port "admin" menu to pre_run

Message ID 20250513093913.396876-7-hadess@hadess.net
State New
Headers show
Series Fix bluetoothctl --help hanging if daemon isn't running | expand

Commit Message

Bastien Nocera May 13, 2025, 9:38 a.m. UTC
---
 client/admin.c | 12 +++++++++++-
 client/admin.h |  1 -
 client/main.c  |  1 -
 3 files changed, 11 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/client/admin.c b/client/admin.c
index 614a492f1f5f..6bcbdc026906 100644
--- a/client/admin.c
+++ b/client/admin.c
@@ -27,6 +27,8 @@  static GList *admin_proxies;
 static GDBusProxy *set_proxy;
 static GDBusProxy *status_proxy;
 
+static void admin_menu_pre_run(const struct bt_shell_menu *menu);
+
 static void admin_policy_set_set_proxy(GDBusProxy *proxy)
 {
 	set_proxy = proxy;
@@ -140,6 +142,7 @@  static void cmd_admin_allow(int argc, char *argv[])
 static const struct bt_shell_menu admin_menu = {
 	.name = "admin",
 	.desc = "Admin Policy Submenu",
+	.pre_run = admin_menu_pre_run,
 	.entries = {
 	{ "allow", "[clear/uuid1 uuid2 ...]", cmd_admin_allow,
 				"Allow service UUIDs and block rest of them"},
@@ -195,8 +198,13 @@  void admin_add_submenu(void)
 	bt_shell_add_submenu(&admin_menu);
 }
 
-void admin_enable_submenu(void)
+static bool pre_run_done = false;
+
+static void admin_menu_pre_run(const struct bt_shell_menu *menu)
 {
+	if (pre_run_done)
+		return;
+
 	dbus_conn = bt_shell_get_env("DBUS_CONNECTION");
 	if (!dbus_conn || client)
 		return;
@@ -205,6 +213,8 @@  void admin_enable_submenu(void)
 	g_dbus_client_set_proxy_handlers(client, proxy_added, proxy_removed,
 							NULL, NULL);
 	g_dbus_client_set_disconnect_watch(client, disconnect_handler, NULL);
+
+	pre_run_done = true;
 }
 
 void admin_remove_submenu(void)
diff --git a/client/admin.h b/client/admin.h
index 08cca585d466..0047770dc737 100644
--- a/client/admin.h
+++ b/client/admin.h
@@ -9,5 +9,4 @@ 
  */
 
 void admin_add_submenu(void);
-void admin_enable_submenu(void);
 void admin_remove_submenu(void);
diff --git a/client/main.c b/client/main.c
index c536a179dc7a..5d32b5218857 100644
--- a/client/main.c
+++ b/client/main.c
@@ -3426,7 +3426,6 @@  int main(int argc, char *argv[])
 		bt_shell_set_env("AUTO_REGISTER_ENDPOINT",
 					(void *)endpoint_option);
 
-	admin_enable_submenu();
 	player_enable_submenu();
 	mgmt_enable_submenu();
 	assistant_enable_submenu();