[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;
 }