return WIFI_MANAGER_ERROR_OUT_OF_MEMORY; //LCOV_EXCL_LINE
}
+ pthread_mutex_init(&(wifi_handle->mutex_ap_handle_list), NULL);
*wifi = wifi_handle;
WIFI_LOG(WIFI_INFO, "New handle create[%p]", *wifi);
void _wifi_destroy_handle(wifi_manager_h wifi)
{
+ if (!wifi)
+ return;
+
+ wifi_manager_handle_s *wifi_handle = (wifi_manager_handle_s *)wifi;
+ pthread_mutex_destroy(&(wifi_handle->mutex_ap_handle_list));
g_free(wifi);
}
}
//LCOV_EXCL_STOP
+static void _wifi_ap_handle_list_lock(wifi_manager_handle_s *wifi)
+{
+ if (!wifi)
+ return;
+
+ int ret = pthread_mutex_lock(&(wifi->mutex_ap_handle_list));
+ if (ret < 0)
+ WIFI_LOG(WIFI_ERROR, "Failed to lock the ap_handle_list[%d]", ret);
+}
+
+static void _wifi_ap_handle_list_unlock(wifi_manager_handle_s *wifi)
+{
+ if (!wifi)
+ return;
+
+ int ret = pthread_mutex_unlock(&(wifi->mutex_ap_handle_list));
+ if (ret < 0)
+ WIFI_LOG(WIFI_ERROR, "Failed to lock the ap_handle_list[%d]", ret);
+}
+
void _wifi_deinit(wifi_manager_h wifi)
{
wifi_manager_handle_s *wifi_handle = wifi;
net_deregister_client_ext(wifi_handle->network_info);
+ _wifi_ap_handle_list_lock((wifi_manager_handle_s *)wifi);
__clear_profile_list(&(wifi_handle->ap_handle_list));
+ _wifi_ap_handle_list_unlock((wifi_manager_handle_s *)wifi);
+
__clear_profile_list(&(wifi_handle->profile_iterator));
__clear_profile_list(&(wifi_handle->specific_profile_iterator));
__clear_profile_list(&(wifi_handle->bss_profile_iterator));
if (_wifi_find_from_handle_list(wifi_handle) == false)
return false;
- if (g_slist_find(wifi_handle->ap_handle_list, ap_info) != NULL)
+ _wifi_ap_handle_list_lock(wifi_handle);
+ if (g_slist_find(wifi_handle->ap_handle_list, ap_info) != NULL) {
+ _wifi_ap_handle_list_unlock(wifi_handle);
return true;
+ }
+ _wifi_ap_handle_list_unlock(wifi_handle);
if (g_slist_find(wifi_handle->profile_iterator, ap_info) != NULL)
return true;
wifi_handle = network_info->wifi_handle;
if (wifi_handle) {
+ _wifi_ap_handle_list_lock(wifi_handle);
wifi_handle->ap_handle_list =
- g_slist_append(wifi_handle->ap_handle_list, ap_info);
+ g_slist_prepend(wifi_handle->ap_handle_list, ap_info);
+ _wifi_ap_handle_list_unlock(wifi_handle);
}
}
wifi_handle = network_info->wifi_handle;
if (wifi_handle) {
+ _wifi_ap_handle_list_lock(wifi_handle);
wifi_handle->ap_handle_list =
g_slist_remove(wifi_handle->ap_handle_list, ap_info);
+ _wifi_ap_handle_list_unlock(wifi_handle);
}
}