From eaea0029a7d0f00c0d8c67f65c081185e8c52419 Mon Sep 17 00:00:00 2001 From: Wootak Jung Date: Tue, 26 Mar 2024 15:18:38 +0900 Subject: [PATCH] Fix issue where wrong manager_id was unregistered app_path and manager_id must match and be unregistered Change-Id: Id0da7b762e25f1b77f6fb36d4ad76272141ed2ed Signed-off-by: Wootak Jung --- bt-oal/bluez_hal/src/bt-hal-gatt-server.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/bt-oal/bluez_hal/src/bt-hal-gatt-server.c b/bt-oal/bluez_hal/src/bt-hal-gatt-server.c index 5ff6c54..ce0dfc6 100644 --- a/bt-oal/bluez_hal/src/bt-hal-gatt-server.c +++ b/bt-oal/bluez_hal/src/bt-hal-gatt-server.c @@ -62,7 +62,6 @@ extern const btgatt_callbacks_t *bt_gatt_callbacks; static guint owner_id; static GDBusConnection *g_conn = NULL; static GDBusNodeInfo *manager_node_info = NULL; -static guint manager_id; #define GATT_HANDLE_MAX_NUM 100 /* Not defined in spec, implementation dependent */ #define SERV_HANDLE_NUM (GATT_HANDLE_MAX_NUM) @@ -210,8 +209,8 @@ static GSList * hal_gatts_server_register_list; #define BT_GATTS_MAX 11 static int assigned_id = 0; - static gboolean instance_id_used[BT_GATTS_MAX]; +static guint manager_id[BT_GATTS_MAX]; #define CHECK_BTGATT_INIT() if (_bt_hal_gatt_interface_ready() == false)\ {\ @@ -223,7 +222,7 @@ static gboolean instance_id_used[BT_GATTS_MAX]; static gboolean __bt_hal_gatt_service_added_cb(gpointer user_data); -static void __bt_hal_gatt_deinit(char *app_path); +static void __bt_hal_gatt_deinit(int server_if); static void __bt_hal_register_application_cb(GObject *object, GAsyncResult *res, gpointer user_data); @@ -2077,7 +2076,7 @@ static void _bt_hal_remove_gatt_server_from_list(int server_if) g_slist_length(gatt_server_apps)); /* DBUS Unregister only for current app */ - __bt_hal_gatt_deinit(info->app_path); + __bt_hal_gatt_deinit(server_if); g_free(info->app_path); g_free(info); @@ -2367,11 +2366,10 @@ static void __bt_hal_unregister_application_cb(GObject *object, GAsyncResult *re g_free(app_path); } -static void __bt_hal_gatt_deinit(char *app_path) +static void __bt_hal_gatt_deinit(int server_if) { GDBusProxy *proxy = NULL; - char *data; - INFO("+"); + char *app_path, *data; /* Step1: Remove requested App */ proxy = __bt_gatt_gdbus_get_gatt_manager_proxy("org.bluez", @@ -2380,10 +2378,11 @@ static void __bt_hal_gatt_deinit(char *app_path) if (proxy == NULL) return; + app_path = g_strdup_printf("/com/%d", server_if); INFO("UnregisterApplication : path [%s]", app_path); /* Async Call to Unregister Service */ - data = g_strdup(app_path); + data = g_strdup_printf("/com/%d", server_if); g_dbus_proxy_call(proxy, "UnregisterApplication", g_variant_new("(o)", @@ -2392,10 +2391,12 @@ static void __bt_hal_gatt_deinit(char *app_path) NULL, (GAsyncReadyCallback)__bt_hal_unregister_application_cb, (gpointer)data); + g_free(app_path); /* unregister the exported interface for object manager */ - g_dbus_connection_unregister_object(g_conn, manager_id); - manager_id = 0; + INFO("Unregister the interface for object with manager_id: %d", manager_id[server_if]); + g_dbus_connection_unregister_object(g_conn, manager_id[server_if]); + manager_id[server_if] = 0; /* If requested app is last GATT Server app, then clean all resources */ if (gatt_server_apps == NULL) { @@ -2408,7 +2409,6 @@ static void __bt_hal_gatt_deinit(char *app_path) manager_gproxy = NULL; } } - INFO("-"); } static int __bt_hal_gatt_init(void) @@ -2516,17 +2516,17 @@ static bt_status_t gatt_server_add_service(int server_if, btgatt_srvc_id_t *srvc app_id = g_malloc0(sizeof(int)); *app_id = server_if; - manager_id = g_dbus_connection_register_object(g_conn, app_path, + manager_id[server_if] = g_dbus_connection_register_object(g_conn, app_path, manager_node_info->interfaces[0], &manager_interface_vtable, (gpointer)app_id, NULL, &error); - if (manager_id == 0) { + if (manager_id[server_if] == 0) { ERR("failed to register: %s", error->message); g_error_free(error); goto failed; } - INFO("manager_id [%d]", manager_id); + INFO("manager_id [%d]", manager_id[server_if]); /* For current GATT Server, app_path is created, save it in Table */ _bt_hal_update_gatt_server_path(server_if, app_path); -- 2.7.4