From 0589a1750e27b7115f6a612387bd17cd19674b90 Mon Sep 17 00:00:00 2001 From: "saerome.kim" Date: Mon, 13 Mar 2017 19:25:50 +0900 Subject: [PATCH] Fixed segmentation falut error after calling mesh_foreach_found_mesh_network() Signed-off-by: saerome.kim --- src/mesh.c | 16 +++------------- src/mesh_dbus.c | 17 +++++++---------- test/mesh_network.c | 8 ++++++-- 3 files changed, 16 insertions(+), 25 deletions(-) diff --git a/src/mesh.c b/src/mesh.c index 187ab75..6be74d4 100644 --- a/src/mesh.c +++ b/src/mesh.c @@ -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; } diff --git a/src/mesh_dbus.c b/src/mesh_dbus.c index d4fd8c3..d11fc83 100644 --- a/src/mesh_dbus.c +++ b/src/mesh_dbus.c @@ -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); diff --git a/test/mesh_network.c b/test/mesh_network.c index f2fb252..ad60d2e 100644 --- a/test/mesh_network.c +++ b/test/mesh_network.c @@ -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); -- 2.34.1