Fix Memory Leak: Incorrect deallocator used. 80/225780/1
authorhimanshu <h.himanshu@samsung.com>
Wed, 19 Feb 2020 05:12:18 +0000 (10:42 +0530)
committerhimanshu <h.himanshu@samsung.com>
Mon, 24 Feb 2020 10:01:58 +0000 (15:31 +0530)
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 <h.himanshu@samsung.com>
bt-service-adaptation/services/bt-service-common.c
bt-service-adaptation/services/device/bt-service-bonded-device.c
bt-service-adaptation/services/include/bt-service-common.h

index d6ed3b7..f113480 100644 (file)
@@ -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;
index 1047fb2..2ff4cb7 100644 (file)
@@ -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;
index bb32986..85b49d8 100644 (file)
@@ -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);