From 4b5a28d6eca49a03b1bea618cd581fb04175bd9a Mon Sep 17 00:00:00 2001 From: himanshu Date: Wed, 19 Feb 2020 10:42:18 +0530 Subject: [PATCH] Fix Memory Leak: Incorrect deallocator used. The g_slist_free_full() in _bt_device_handle_adapter_state should be provided with a custom function for proper deallocation. Change-Id: Ie250973cb8c736dad85133affe61c3d0c1b0f1e1 Signed-off-by: himanshu --- bt-service-adaptation/services/bt-service-common.c | 18 ++++++++++++++++++ .../services/device/bt-service-bonded-device.c | 2 +- .../services/include/bt-service-common.h | 2 ++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/bt-service-adaptation/services/bt-service-common.c b/bt-service-adaptation/services/bt-service-common.c index d6ed3b7..f113480 100644 --- a/bt-service-adaptation/services/bt-service-common.c +++ b/bt-service-adaptation/services/bt-service-common.c @@ -1225,6 +1225,24 @@ void _bt_free_remote_dev(bt_remote_dev_info_t *dev_info) } +void _bt_free_paired_dev(void *paired_info) +{ + bt_remote_dev_info_t* dev_info = (bt_remote_dev_info_t*) paired_info; + unsigned int c; + + ret_if(NULL == dev_info); + + g_free(dev_info->address); + g_free(dev_info->name); + g_free(dev_info->alias); + g_free(dev_info->manufacturer_data); + + for (c = 0; c < dev_info->uuid_count; c++) + g_free(dev_info->uuids[c]); + g_free(dev_info->uuids); + g_free(dev_info); +} + static void __bt_get_service_list(bt_remote_dev_info_t *info, bluetooth_device_info_t *dev) { unsigned int i; diff --git a/bt-service-adaptation/services/device/bt-service-bonded-device.c b/bt-service-adaptation/services/device/bt-service-bonded-device.c index 1047fb2..2ff4cb7 100644 --- a/bt-service-adaptation/services/device/bt-service-bonded-device.c +++ b/bt-service-adaptation/services/device/bt-service-bonded-device.c @@ -494,7 +494,7 @@ void _bt_device_handle_adapter_state(gboolean enabled) if (!enabled) { BT_DBG("Adapter disabled"); - g_slist_free_full(paired_list, g_free); + g_slist_free_full(paired_list, _bt_free_paired_dev); paired_list = NULL; bonded_list_retrieved = FALSE; return; diff --git a/bt-service-adaptation/services/include/bt-service-common.h b/bt-service-adaptation/services/include/bt-service-common.h index bb32986..85b49d8 100644 --- a/bt-service-adaptation/services/include/bt-service-common.h +++ b/bt-service-adaptation/services/include/bt-service-common.h @@ -430,6 +430,8 @@ void _bt_service_print_dev_info(bluetooth_device_info_t *dev_info); void _bt_free_remote_dev(bt_remote_dev_info_t * dev_info); +void _bt_free_paired_dev(void * paired_info); + void _bt_set_device_values(gboolean connected, int state); void _bt_string_to_uuid(char *str, service_uuid_t *p_uuid); -- 2.7.4