[BugFix][API-1596]add mutex && disconenct current device before conenct

Affected branch:MR3.0-xx && GSW3.0

Affected module:wifi

Is it addected on both ZXIC and MTK: only MTK

Self-test: YES

Doc Update: No

Change-Id: Ib1e7d5e323e73b2055b60e4271720b9b56281864
diff --git a/IC_src/mtk/lib/liblynq-wifi6/libwifi6.c b/IC_src/mtk/lib/liblynq-wifi6/libwifi6.c
index 2f462e3..5323831 100755
--- a/IC_src/mtk/lib/liblynq-wifi6/libwifi6.c
+++ b/IC_src/mtk/lib/liblynq-wifi6/libwifi6.c
@@ -105,6 +105,7 @@
 static pthread_mutex_t s_sta_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t s_ap_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
 static pthread_mutex_t s_run_cmd_func_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t s_func_run_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 // add for auto connect
 static pthread_mutex_t s_sta_auto_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -2314,7 +2315,6 @@
     int check;
     char lynq_wifi_frequency_cmd[128]={0};
     char lynq_cmd_mode[128]={0};
-    char lynq_cmd_slect[128]={0};
     RLOGD("enter %s %d input frequency:%d",__func__,__LINE__,lynq_wifi_frequency);
     //@do check input frequency
     check = lynq_check_set_frequency(lynq_wifi_frequency);
@@ -2342,7 +2342,6 @@
 
     sprintf(lynq_wifi_frequency_cmd,"SET_NETWORK %d frequency %d", AP_NETWORK_0, lynq_wifi_frequency);
     sprintf(lynq_cmd_mode, "SET_NETWORK %d mode 2", AP_NETWORK_0);
-    sprintf(lynq_cmd_slect, "SELECT_NETWORK %d", AP_NETWORK_0);
 
     DO_OK_FAIL_REQUEST(cmd_disconnect);
     DO_OK_FAIL_REQUEST(lynq_wifi_frequency_cmd);
@@ -3698,7 +3697,9 @@
 */
 int lynq_wifi_sta_connect_common(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw, int timeout,int ap_type)
 {
-    int count, net_no, index;
+    RLOGD("enter %s %d",__func__,__LINE__);
+    pthread_mutex_lock(&s_func_run_mutex);
+    int count, net_no, index,res;
     int net_no_list[128];
     char rm_net_cmd[128];
     lynq_wifi_auth_s net_auth;
@@ -3706,10 +3707,11 @@
     ap_info_s ap_info;
     char status[64];
 
+    res = -1;
     if (ssid == NULL || *ssid == '\0')
     {
         RLOGE("bad ssid\n");
-        return -1;
+        goto CONNECT_END;
     }
 
     if (LYNQ_WIFI_AUTH_OPEN != auth)
@@ -3717,7 +3719,7 @@
         if (psw == NULL || strlen(psw) < 8 || strlen(psw) >= 64)
         {
             RLOGE("bad password\n");
-            return -1;
+            goto CONNECT_END;
         }
     }
 
@@ -3748,14 +3750,14 @@
             if (0 == lynq_sta_ssid_password_get(idx, &ap_info, ap_info.psw)
                     && strcmp(ap_info.psw, psw) == 0)
             {
-                RLOGD("already connected\n");
-
+                RLOGD("already connected %s %d\n",__func__,__LINE__);
                 pthread_mutex_lock(&s_global_check_mutex);
                 s_sta_status = INNER_STA_STATUS_CONNECTED;
                 lynq_sta_removeElement(net_no);
                 pthread_cond_signal(&s_global_check_cond);
                 pthread_mutex_unlock(&s_global_check_mutex);
-                return 0;
+                res = 0;
+                goto CONNECT_END;
             }
         }
     }
@@ -3786,20 +3788,23 @@
             net_no = lynq_add_network(CTRL_STA);
             if (net_no == -1)
             {
-                return -1;
+                RLOGE("add network id failed %s %d\n",__func__,__LINE__);
+                goto CONNECT_END;
             }
 
             RLOGD("net no is %d\n", net_no);
             if (0 != inner_set_sta_ssid(net_no, ssid))
             {
-                return -1;
+                RLOGE("set network %d ssid failed %s %d\n",net_no,__func__,__LINE__);
+                goto CONNECT_END;
             }
         }
     }
 
     if (0 != inner_set_sta_auth_psw(net_no, auth, psw))
     {
-        return -1;
+        RLOGE("set inner_set_sta_auth_psw %d ssid failed %s %d\n",net_no,__func__,__LINE__);
+        goto CONNECT_END;
     }
 
 //begain 20240328 change for support sta connect hide ap by qs.xiong API-1569
@@ -3819,7 +3824,7 @@
     lynq_sta_removeElement(net_no);
     pthread_mutex_unlock(&s_global_check_mutex);
 
-    ret = inner_sta_start_stop(net_no, 1, 1);
+    res = inner_sta_start_stop(net_no, 1, 1);
 
     pthread_mutex_lock(&s_global_check_mutex);
     s_sta_status = INNER_STA_STATUS_CONNECTING;
@@ -3831,7 +3836,12 @@
     s_sta_connect_timeout.tv_nsec = now.tv_usec*1000;
     pthread_cond_signal(&s_global_check_cond);
     pthread_mutex_unlock(&s_global_check_mutex);
-    return ret;
+
+CONNECT_END:
+    pthread_mutex_unlock(&s_func_run_mutex);
+    RLOGD("end %s %d  and return is %d \n",__func__,__LINE__,res);
+    return res;
+
 }
 
 int lynq_wifi_sta_connect_timeout(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw, int timeout)
@@ -4990,7 +5000,6 @@
 
     char lynq_wifi_acs_cmd[128]={0};
     char lynq_cmd_mode[128]={0};
-    char lynq_cmd_slect[128]={0};
 
     if((acs_mode != 2) && (acs_mode != 5))
     {
@@ -5008,13 +5017,11 @@
 
     sprintf(lynq_wifi_acs_cmd,"SET_NETWORK %d frequency %d", AP_NETWORK_0, acs_mode);
     sprintf(lynq_cmd_mode, "SET_NETWORK %d mode 2", AP_NETWORK_0);
-    sprintf(lynq_cmd_slect, "SELECT_NETWORK %d", AP_NETWORK_0);
 
     DO_OK_FAIL_REQUEST(cmd_disconnect);
     DO_OK_FAIL_REQUEST(lynq_wifi_acs_cmd);
     DO_OK_FAIL_REQUEST(lynq_cmd_mode);
     DO_OK_FAIL_REQUEST(cmd_save_config);
-    DO_OK_FAIL_REQUEST(lynq_cmd_slect);
 
     return 0;
 }