Rearrange memory ownership of found device
[platform/core/connectivity/wifi-direct-manager.git] / src / wifi-direct-manager.c
index e23f972..497b536 100644 (file)
@@ -1241,6 +1241,7 @@ int wfd_manager_get_peer_info(wfd_manager_s *manager, unsigned char *addr, wfd_d
 #endif
        WDS_LOGI("Current time [%ld]", time);
 //LCOV_EXCL_START
+       //wfd_manager_get_peer_info takes responsibility of the oem_dev' memory ownership.
        res = wfd_oem_get_peer_info(manager->oem_ops, addr, &oem_dev);
        if (res < 0 || !oem_dev) {
                WDS_LOGE("Failed to get peer information");//LCOV_EXCL_LINE
@@ -1253,7 +1254,9 @@ int wfd_manager_get_peer_info(wfd_manager_s *manager, unsigned char *addr, wfd_d
                if (!peer_dev) {
                        strerror_r(errno, error_buf, MAX_SIZE_ERROR_BUFFER);
                        WDS_LOGE("Failed to allocate memory for peer device. [%s]", error_buf);
-                       free(oem_dev);
+                       if (oem_dev->vsie)
+                               g_free(oem_dev->vsie);
+                       g_free(oem_dev);
                        return -1;
                }
                memcpy(peer_dev->dev_addr, addr, MACADDR_LEN);
@@ -1264,7 +1267,9 @@ int wfd_manager_get_peer_info(wfd_manager_s *manager, unsigned char *addr, wfd_d
        } else {
                if (oem_dev->age > 30 && peer_dev->state == WFD_PEER_STATE_DISCOVERED) {
                        WDS_LOGE("Too old age to update peer");//LCOV_EXCL_LINE
-                       free(oem_dev);
+                       if (oem_dev->vsie)
+                               g_free(oem_dev->vsie);
+                       g_free(oem_dev);
                        return -1;
                }
        }