Free vsie for peer which was not freed 40/250940/1 accepted/tizen_6.0_unified accepted/tizen/6.0/unified/20210106.073449 accepted/tizen/6.0/unified/20210113.035417 submit/tizen_6.0/20210106.044322 submit/tizen_6.0/20210112.224843
authorYu <jiung.yu@samsung.com>
Wed, 6 Jan 2021 03:07:32 +0000 (12:07 +0900)
committerJiung Yu <jiung.yu@samsung.com>
Wed, 6 Jan 2021 03:08:29 +0000 (03:08 +0000)
Change-Id: I52755360e2dcb3a0c33d7af685512fddf7234004
Signed-off-by: Yu jiung <jiung.yu@samsung.com>
include/wifi-direct-peer.h
src/wifi-direct-event.c
src/wifi-direct-group.c
src/wifi-direct-manager.c
src/wifi-direct-method.c
src/wifi-direct-peer.c

index 7ac03be..c41b1fb 100644 (file)
@@ -32,6 +32,7 @@
 extern "C" {
 #endif
 
+void wfd_peer_destroy(wfd_device_s *peer);
 wfd_device_s *wfd_add_peer(void *data, unsigned char *dev_addr, char *dev_name);
 int wfd_remove_peer(void *data, unsigned char *dev_addr);
 int wfd_update_peer(void *data, wfd_device_s *peer);
index 848cd5f..2783b4e 100755 (executable)
@@ -106,9 +106,9 @@ static int _wfd_event_update_peer(wfd_manager_s *manager, wfd_oem_dev_data_s *da
 
        if (data->vsie) {
                if (peer->vsie)
-                       free(peer->vsie);
+                       g_free(peer->vsie);
                peer->vsie = g_strdup(data->vsie);
-               free(data->vsie);
+               g_free(data->vsie);
                data->vsie = NULL;
        }
        WDS_LOGD("Peer name: [%s], vsie: [%s]", peer->dev_name, peer->vsie);
index b109a21..b4405fa 100644 (file)
@@ -221,7 +221,7 @@ int wfd_destroy_group(void *data)
        while (temp && count < group->member_count) {
                member = temp->data;
                WDS_LOGD("%dth member[%p: %s] will be removed", count, member, member->dev_name);
-               g_free(member);
+               wfd_peer_destroy(member);
                member = NULL;
                temp = g_list_next(temp);
                count++;
@@ -396,7 +396,7 @@ int wfd_group_remove_member(wfd_group_s *group, unsigned char *addr)
        }
 
        group->members = g_list_remove(group->members, member);
-       g_free(member);
+       wfd_peer_destroy(member);
        group->member_count--;
        member_cnt = group->member_count;
 
index 4bd7971..e23f972 100644 (file)
@@ -1383,7 +1383,7 @@ int wfd_manager_get_peers(wfd_manager_s *manager, wfd_discovery_entry_s **peers_
                                temp = g_list_next(temp);
                                manager->peers = g_list_remove(manager->peers, peer);
                                manager->peer_count--;
-                               g_free(peer);
+                               wfd_peer_destroy(peer);
                                peer = NULL;
                                continue;
                        }
index ccc1123..015fe46 100755 (executable)
@@ -732,7 +732,11 @@ void get_peer_info_handler(GVariant *parameters, void *dest)
        ret = wfd_manager_get_peer_info(manager, mac_addr, &peer);
        if (ret < 0 || !peer) {
                WDS_LOGE("Failed to get peer info");
-               g_free(peer);
+               if (peer) {
+                       if (peer->vsie)
+                               g_free(peer->vsie);
+                       g_free(peer);
+               }
                WIFI_DIRECT_METHOD_RET_ERR(WIFI_DIRECT_ERROR_OPERATION_FAILED, dest);
        }
 
@@ -800,7 +804,8 @@ void get_peer_info_handler(GVariant *parameters, void *dest)
        ret = WIFI_DIRECT_ERROR_NONE;
        return_parameters = g_variant_new("(ia{sv})", ret, builder_peer);
        g_variant_builder_unref(builder_peer);
-       g_free(peer->vsie);
+       if (peer->vsie)
+               g_free(peer->vsie);
        g_free(peer);
        wfd_manager_dbus_reply_params((GDBusMethodInvocation *)dest, return_parameters);
 
index 75ca415..1f86067 100644 (file)
 #include "wifi-direct-session.h"
 #include "wifi-direct-log.h"
 
+void wfd_peer_destroy(wfd_device_s *peer)
+{
+       if (!peer)
+               return;
+
+       if (peer->vsie)
+               g_free(peer->vsie);
+
+       g_free(peer);
+
+       return;
+}
+
 
 wfd_device_s *wfd_add_peer(void *data, unsigned char *dev_addr, char *dev_name)
 {
@@ -101,7 +114,7 @@ int wfd_remove_peer(void *data, unsigned char *dev_addr)
        manager->peers = g_list_remove(manager->peers, peer);
        manager->peer_count--;
 
-       g_free(peer);
+       wfd_peer_destroy(peer);
 
        __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
        return 0;
@@ -209,7 +222,7 @@ int wfd_peer_clear_all(void *data)
        temp = g_list_first(manager->peers);
        while (temp) {
                peer = (wfd_device_s*) temp->data;
-               g_free(peer);
+               wfd_peer_destroy(peer);
                temp = g_list_next(temp);
                manager->peer_count--;
        }