Fix memory leaks 50/221150/2 submit/tizen/20200115.081408
authorJaehyun Kim <jeik01.kim@samsung.com>
Fri, 27 Dec 2019 12:46:13 +0000 (21:46 +0900)
committerJaehyun Kim <jeik01.kim@samsung.com>
Wed, 8 Jan 2020 07:01:01 +0000 (16:01 +0900)
Change-Id: Idc0f49c7965593b9e2d2b2de358adc17fed609e5
Signed-off-by: Jaehyun Kim <jeik01.kim@samsung.com>
src/network_internal.c

index 1e0bd17..f7071b8 100755 (executable)
@@ -350,6 +350,22 @@ int _net_open_connection_with_wifi_info(const net_wifi_connection_info_s* wifi_i
        return Error;
 }
 
+static void __net_client_clear_cb_data(net_event_info_s *client)
+{
+       if (client && client->Datalength > 0) {
+               if (client->Event == NET_EVENT_WIFI_SPECIFIC_SCAN_IND ||
+                               client->Event == NET_EVENT_WIFI_BSSID_SCAN_IND ||
+                               client->Event == NET_EVENT_WIFI_NETLINK_SCAN_IND) {
+                       GSList *bss_info_list = client->Data;
+
+                       if (bss_info_list != NULL)
+                               g_slist_free_full(bss_info_list, g_free);
+               }
+               g_free(client->Data);
+       }
+       g_free(client);
+}
+
 static gboolean __net_client_cb_wifi_idle(gpointer data)
 {
        net_event_info_s *event_data = (net_event_info_s *)data;
@@ -357,10 +373,7 @@ static gboolean __net_client_cb_wifi_idle(gpointer data)
        if (NetworkInfo.ClientEventCb_wifi != NULL)
                NetworkInfo.ClientEventCb_wifi(event_data, NetworkInfo.user_data_wifi);
 
-       if (event_data->Datalength > 0)
-               g_free(event_data->Data);
-
-       g_free(event_data);
+       __net_client_clear_cb_data(event_data);
 
        return FALSE;
 }
@@ -414,12 +427,8 @@ void _net_client_callback(net_event_info_s *event_data)
                }
 
                id = _net_client_callback_add(__net_client_cb_wifi_idle, (gpointer)client);
-               if (!id) {
-                       if (client->Datalength > 0)
-                               g_free(client->Data);
-
-                       g_free(client);
-               }
+               if (!id)
+                       __net_client_clear_cb_data(client);
        }
 
        __NETWORK_FUNC_EXIT__;
@@ -540,6 +549,7 @@ void _net_client_callback_cleanup(void)
 
                src = g_main_context_find_source_by_id(g_main_context_default(), data->id);
                if (src) {
+                       __net_client_clear_cb_data((net_event_info_s *)data->user_data);
                        g_source_destroy(src);
                        cur = managed_idler_list;
                } else