[Bugfix][API-867][wifi] create monitor thread when register the callbacks
Change-Id: I62d4c7165266dbd890bcce68e3a8e4864d3ac5dc
diff --git a/lib/liblynq-wifi6/libwifi6.c b/lib/liblynq-wifi6/libwifi6.c
index 4b8bce8..5ee8afc 100755
--- a/lib/liblynq-wifi6/libwifi6.c
+++ b/lib/liblynq-wifi6/libwifi6.c
@@ -827,27 +827,6 @@
usleep(300*1000);
system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=ap0 disconnect");
}
- if (g_ap_watcher_pid == 0 )
- {
- ret=pthread_create(&g_ap_watcher_pid,NULL,APWatcherThreadProc,NULL);
- if(ret<0)
- {
- RLOGE("[wifi error]creat APWatcherThreadProc fail");
- ret = -1;
- goto out_enable;
- }
- }
-
- RLOGD("creat APWatcherTheradProc susccs");
- if (g_sta_watcher_pid == 0 ) {
- ret=pthread_create(&g_sta_watcher_pid,NULL,STAWatcherThreadProc,NULL);
- if(ret<0)
- {
- RLOGE("[wifi error]creat STAWatcherThreadProc fail");
- ret = -1;
- goto out_enable;
- }
- }
if (g_global_watcher_pid == 0 ) // this thread will not exit when lynq_wifi_disable called,to avoid dead lock,take care
{
@@ -860,16 +839,6 @@
}
}
- RLOGD("creat STAWatcherTheradProc susccs");
- for (i=0; i<10; i++)
- {
- usleep(300*1000);
- if (g_ap_watcher_started_flag == 1 && g_sta_watcher_started_flag == 1)
- {
- break;
- }
- }
-
g_lynq_wpa_ctrl[0] = malloc(sizeof (struct local_wpa_ctrl));
g_lynq_wpa_ctrl[1] = malloc(sizeof (struct local_wpa_ctrl));
memset(g_lynq_wpa_ctrl[0], 0 , sizeof(struct local_wpa_ctrl));
@@ -3205,9 +3174,24 @@
return -1;
}
+ pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
g_ap_callback_priv = priv;
g_ap_callback_func = cb;
+ if (g_ap_watcher_pid == 0 )
+ {
+ if(pthread_create(&g_ap_watcher_pid,NULL,APWatcherThreadProc,NULL) < 0)
+ {
+ g_ap_watcher_pid = 0;
+ pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+ RLOGE("[wifi error]creat APWatcherThreadProc fail");
+ return -1;
+ }
+ }
+
+ pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+ RLOGD("creat APWatcherTheradProc susccs");
+
return 0;
}
@@ -3228,9 +3212,22 @@
return -1;
}
+ pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
g_sta_callback_priv = priv;
g_sta_callback_func = cb;
+ if (g_sta_watcher_pid == 0 ) {
+ if(pthread_create(&g_sta_watcher_pid,NULL,STAWatcherThreadProc,NULL) < 0)
+ {
+ g_sta_watcher_pid = 0;
+ pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+ RLOGE("[wifi error]creat STAWatcherThreadProc fail");
+ return -1;
+ }
+ }
+
+ pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+ RLOGD("creat STAWatcherTheradProc susccs");
return 0;
}