Fixed segmentation falut error after calling mesh_foreach_found_mesh_network()
authorsaerome.kim <saerome.kim@samsung.com>
Mon, 13 Mar 2017 10:25:50 +0000 (19:25 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Mon, 17 Jul 2017 02:09:10 +0000 (11:09 +0900)
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
src/mesh.c
src/mesh_dbus.c
test/mesh_network.c

index 187ab75..6be74d4 100644 (file)
@@ -47,8 +47,8 @@ EXPORT_API int mesh_network_new(mesh_network_h* network)
 
 EXPORT_API int mesh_network_clone(mesh_network_h* dst, mesh_network_h src)
 {
-       struct mesh_network_s *net;
-       struct mesh_network_s *_src = src;;
+       struct mesh_network_s *net = NULL;
+       struct mesh_network_s *_src = src;
 
        CHECK_FEATURE_SUPPORTED(MESH_FEATURE);
 
@@ -64,10 +64,6 @@ EXPORT_API int mesh_network_clone(mesh_network_h* dst, mesh_network_h src)
        }
        memcpy(net->meshid, _src->meshid, MAX_MESHID_LEN);
        memcpy(net->bssid, _src->bssid, MAX_BSSID_LEN);
-       //net->meshid = g_strdup(_src->meshid);
-       LOGE("net->meshid=%s _src->meshid=%s", net->meshid, _src->meshid);
-       //net->bssid = g_strdup(_src->bssid);
-       LOGE("net->bssid=%s _src->bssid=%s", net->bssid, _src->bssid);
        net->channel = _src->channel;
        net->rssi = _src->rssi;
        net->data_rate = _src->data_rate;
@@ -110,11 +106,7 @@ EXPORT_API void mesh_network_destroy(mesh_network_h network)
                LOGE("Invalid parameter"); //LCOV_EXCL_LINE
                return; //LCOV_EXCL_LINE
        }
-#if 0
-       free(net->meshid);
-       free(net->bssid);
-#endif
-       free(net);
+       if (net) free(net);
 }
 
 EXPORT_API int mesh_network_get_meshid(mesh_network_h network, char **meshid)
@@ -162,8 +154,6 @@ EXPORT_API int mesh_network_get_bssid(mesh_network_h network, char **bssid)
        }
 
        *bssid = net->bssid;
-       LOGE("net->bssid = %s", net->bssid);
-
        return MESH_ERROR_NONE;
 }
 
index d4fd8c3..d11fc83 100644 (file)
@@ -100,7 +100,6 @@ static int _mesh_close_gdbus_call(mesh_h handle)
 }
 
 struct mesh_network_list_s {
-
        int count;
        GList *list;
 };
@@ -109,9 +108,7 @@ struct mesh_network_list_s g_networks;
 static void _mesh_free_network(gpointer data)
 {
        struct mesh_network_s *network = data;
-       //g_free(network->meshid);
-       //g_free(network->bssid);
-       g_free(network);
+       if (network) g_free(network);
        network = NULL;
 }
 
@@ -126,6 +123,7 @@ static void _mesh_remove_networks()
 {
        if (g_networks.list)
                g_list_free_full(g_networks.list, _mesh_free_network);
+       g_networks.list = NULL;
        g_networks.count = 0;
 }
 
@@ -143,6 +141,7 @@ static int _mesh_get_scan_result(mesh_h handle)
        GVariant *val;
        gsize len = 0;
 
+       /* Clear previous scan results */
        _mesh_remove_networks();
 
        RETV_IF(NULL == h->dbus_connection, MESH_ITNL_ERR_IO_ERROR);
@@ -160,24 +159,22 @@ static int _mesh_get_scan_result(mesh_h handle)
                                g_malloc0(sizeof(struct mesh_network_s));
                        while (g_variant_iter_loop(iter_row, "{sv}", &key, &val)) {
                                if (strcasecmp(key, "mesh_id") == 0)  {
-                                       //network_info->meshid = g_variant_dup_string(val, &len);
                                        const char *buf = g_variant_get_string(val, &len);
                                        memcpy(network_info->meshid, buf, len);
-                                       LOGE("meshid=%s", network_info->meshid);
+                                       //LOGD("meshid=%s", network_info->meshid);
                                }
                                else if (strcasecmp(key, "bssid") == 0)  {
-                                       //network_info->bssid = g_variant_dup_string(val, &len);
                                        const char *buf = g_variant_get_string(val, &len);
                                        memcpy(network_info->bssid, buf, len);
-                                       LOGE("bssid = %s", network_info->bssid);
+                                       //LOGD("bssid = %s", network_info->bssid);
                                }
                                else if (strcasecmp(key, "rssi") == 0)  {
                                        network_info->rssi = g_variant_get_int32(val);
-                                       LOGE("rssi = %d", network_info->rssi);
+                                       //LOGD("rssi = %d", network_info->rssi);
                                }
                                else if (strcasecmp(key, "channel") == 0)  {
                                        network_info->channel = g_variant_get_uint32(val);
-                                       LOGE("channel = %d", network_info->channel);
+                                       //LOGD("channel = %d", network_info->channel);
 
                                        /* Last element */
                                        _mesh_append_network(network_info);
index f2fb252..ad60d2e 100644 (file)
@@ -192,7 +192,9 @@ static int run_get_scanned_mesh_network(MManager *mm, struct menu_data *menu)
 
        /* Clear previous scanned network list */
        g_scan_net_idx = 1;
-       if (g_hash_scan_net_list) g_hash_table_remove_all(g_hash_scan_net_list);
+       if (g_hash_scan_net_list) {
+               g_hash_table_remove_all(g_hash_scan_net_list);
+       }
 
        g_hash_scan_net_list =
                g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, mesh_network_destroy);
@@ -400,7 +402,9 @@ static int run_get_saved_network(MManager *mm, struct menu_data *menu)
 
        /* Clear previous saved network configurations */
        g_saved_net_idx = 1;
-       if (g_hash_saved_net_list) g_hash_table_remove_all(g_hash_saved_net_list);
+       if (g_hash_saved_net_list) {
+               g_hash_table_remove_all(g_hash_saved_net_list);
+       }
 
        g_hash_saved_net_list =
                g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, mesh_network_destroy);