Fix the memory leak in app battery info 88/229688/1
authorDoHyun Pyun <dh79.pyun@samsung.com>
Fri, 3 Apr 2020 00:35:25 +0000 (09:35 +0900)
committerDoHyun Pyun <dh79.pyun@samsung.com>
Fri, 3 Apr 2020 00:35:25 +0000 (09:35 +0900)
Change-Id: I7feadb193a18bbaa932d7e48f0373715d4eef78e
Signed-off-by: DoHyun Pyun <dh79.pyun@samsung.com>
bt-service-adaptation/services/bt-request-handler.c
bt-service-adaptation/services/bt-service-battery-monitor.c

index d36d751..e870bf2 100644 (file)
@@ -513,7 +513,7 @@ int __bt_bluez_request(int function_name,
                }
                dbus_data.num_app = n;
                g_array_append_vals(*out_param1, &dbus_data, sizeof(bt_battery_dbus_data_t));
-               g_slist_free(data->atm_list);
+               g_slist_free_full(data->atm_list, g_free);
                g_free(data);
                data = NULL;
                break;
index 5133774..4fe89b3 100644 (file)
@@ -148,11 +148,9 @@ int _bt_bm_read_data(_bt_battery_data_t *data)
 
        gettimeofday(&app_scan_base, 0);
 
-       data->atm_list = current_session_data->atm_list;
-       if (data->atm_list == NULL) {
-               BT_DBG("No data transaction in this session");
-               return BLUETOOTH_ERROR_NONE;
-       }
+       /* Note that this is a "shallow" copy. The pointers are copied but the actual data isn't. */
+       data->atm_list = g_slist_copy(current_session_data->atm_list);
+       current_session_data->atm_list = NULL;
 
        BT_DBG("App-wise data transaction details");
        for (GSList *l = data->atm_list; l != NULL; l = g_slist_next(l)) {
@@ -160,7 +158,6 @@ int _bt_bm_read_data(_bt_battery_data_t *data)
                BT_DBG("%ld %ld %d %d %u", (long int)(t->uid), (long int)(t->pid), t->rx_bytes, t->tx_bytes, t->time);
        }
 
-       current_session_data->atm_list = NULL;
        return BLUETOOTH_ERROR_NONE;
 }
 
@@ -542,7 +539,7 @@ static void __bt_notify_battery_data(void)
                BLUETOOTH_EVENT_DISABLED_BATTERY_DATA,
                param);
 
-       g_slist_free(data->atm_list);
+       g_slist_free_full(data->atm_list, g_free);
        g_free(data);
        g_array_free(info, TRUE);
        BT_INFO("-");