diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 03fc67a..c60a6d4 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -60,7 +60,14 @@
 const char * state_scan_result = "CTRL-EVENT-SCAN-RESULTS";
 const char * STATE_COMPLETED = "COMPLETED";
 
-static struct wpa_ctrl * g_lynq_wpa_ctrl[2] = {0};
+struct local_wpa_ctrl{
+    struct wpa_ctrl *ctrl;
+    pthread_mutex_t mutex;
+};
+
+static pthread_mutex_t s_check_wpa_ctrl_mutex = PTHREAD_MUTEX_INITIALIZER;
+
+static struct local_wpa_ctrl * g_lynq_wpa_ctrl[2] = {0};
 
 
 typedef struct __curr_status_info {
@@ -69,6 +76,48 @@
     int net_no;
 }curr_status_info;
 
+static int local_wpa_ctrl_request(struct local_wpa_ctrl *ctrl, const char *cmd, size_t cmd_len,
+                            char *reply, size_t *reply_len,
+                                  void (*msg_cb)(char *msg, size_t len))
+{
+    int ret;
+    if (ctrl->ctrl == NULL) {
+        printf("local_wpa_ctrl_request ctrl is null\n");
+        return -1;
+    }
+    pthread_mutex_lock(&ctrl->mutex);
+    ret = wpa_ctrl_request(ctrl->ctrl, cmd, cmd_len, reply, reply_len, msg_cb);
+    pthread_mutex_unlock(&ctrl->mutex);
+    return ret;
+}
+
+static struct local_wpa_ctrl * inner_get_wpa_ctrl(int index) {
+    int repeat_cnt;
+    struct local_wpa_ctrl *lynq_wpa_ctrl = NULL;
+    pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+    for (repeat_cnt = 0; repeat_cnt < 5 && NULL == g_lynq_wpa_ctrl[index]; repeat_cnt++) {
+        pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+//        printf("wait enable finish\n");
+        usleep(500 * 1000);
+        pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+    }
+    if (NULL == g_lynq_wpa_ctrl[index]) {
+        goto out_addr;
+    }
+    if (NULL == g_lynq_wpa_ctrl[index]->ctrl) {
+        g_lynq_wpa_ctrl[index]->ctrl = wpa_ctrl_open(CTRL_PATH[index]);
+        if (NULL == g_lynq_wpa_ctrl[index]->ctrl) {
+            printf("wpa_ctrl_open fail\n");
+            goto out_addr;
+        }
+        pthread_mutex_init(&g_lynq_wpa_ctrl[index]->mutex, NULL);
+    }
+    lynq_wpa_ctrl = g_lynq_wpa_ctrl[index];
+out_addr:
+    pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+    return lynq_wpa_ctrl;
+}
+
 #define PRINT_AND_RETURN_VALUE(str,value) \
 {\
     perror((str));\
@@ -86,23 +135,17 @@
 #define CHECK_WPA_CTRL(index) int ret = 0;\
     size_t reply_len = MAX_RET; \
     char cmd_reply[MAX_RET]={0}; \
-    struct wpa_ctrl *lynq_wpa_ctrl = NULL; \
+    struct local_wpa_ctrl *lynq_wpa_ctrl = NULL; \
     do{ \
-        if (NULL == g_lynq_wpa_ctrl[index]) { \
-            g_lynq_wpa_ctrl[index] = wpa_ctrl_open(CTRL_PATH[index]); \
-            if (NULL == g_lynq_wpa_ctrl[index]) { \
-                printf("wpa_ctrl_open fail\n"); \
-                return -1; \
-            } \
-        } \
-        lynq_wpa_ctrl = g_lynq_wpa_ctrl[index]; \
+        lynq_wpa_ctrl = inner_get_wpa_ctrl(index); \
+        if (NULL == lynq_wpa_ctrl) return -1; \
     }while(0)
 
 #define DO_REQUEST(cmd_str) do { \
         reply_len = MAX_RET;\
         cmd_reply[0] = '\0'; \
-        printf("to call [%s]\n", cmd_str);  \
-        ret = wpa_ctrl_request(lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL); \
+        printf("to call 3 [%s]\n", cmd_str);  \
+        ret = local_wpa_ctrl_request(lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL); \
         if (ret != 0) { \
             printf("call "#cmd_str" fail %d\n", ret); \
             return ret; \
@@ -244,6 +287,13 @@
 {
     int ret = 0;
     int i;
+
+    pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+
+    if (g_lynq_wpa_ctrl[0] != NULL && g_lynq_wpa_ctrl[1] != NULL) {
+        goto out_enable;
+    }
+
     const char * cmd_check_service =
             "state=`systemctl is-active wg870_drv_insmod.service`\n"
             "[ \"\"$state == \"active\" ] && exit 0\n"
@@ -255,7 +305,8 @@
     ret = system(cmd_check_service);
     if (ret != 0) {
         printf("service state %d\n", ret);
-        return -1;
+        ret = -1;
+        goto out_enable;
     }
 
     for (i=0; i<10; i++) {
@@ -266,7 +317,8 @@
     }
 
     if (i >= 10) {
-        return -1;
+        ret = -1;
+        goto out_enable;
     }
 
     //@todo delete add temp check for socket avilable start (20220606)
@@ -280,7 +332,8 @@
 
     if (i >= 60)
     {
-        return -1;
+        ret = -1;
+        goto out_enable;
     }
     //@todo delete add temp check for socket avilable end (20220606)
 
@@ -298,14 +351,16 @@
     if (g_ap_watcher_pid == 0 ) {
         ret=pthread_create(&g_ap_watcher_pid,NULL,APWatcherThreadProc,NULL);
         if(ret<0){
-            return -1;
+            ret = -1;
+            goto out_enable;
         }
     }
 
     if (g_sta_watcher_pid == 0 ) {
         ret=pthread_create(&g_sta_watcher_pid,NULL,STAWatcherThreadProc,NULL);
         if(ret<0){
-            return -1;
+            ret = -1;
+            goto out_enable;
         }
     }
 
@@ -316,11 +371,16 @@
         }
     }
 
+    g_lynq_wpa_ctrl[0] = malloc(sizeof (struct local_wpa_ctrl));
+    g_lynq_wpa_ctrl[1] = malloc(sizeof (struct local_wpa_ctrl));
+ out_enable:
+    pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
     return ret;
 }
 
 int lynq_wifi_disable(void)
 {
+    pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
     g_ap_watcher_stop_flag = 1;
     g_sta_watcher_stop_flag = 1;
     if (g_ap_watcher_pid != 0)
@@ -336,6 +396,7 @@
     g_lynq_wpa_ctrl[0] = NULL;
     g_lynq_wpa_ctrl[1] = NULL;
     system("systemctl stop wg870_drv_insmod.service");
+    pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
 	return 0;
 }
 
@@ -1426,6 +1487,7 @@
     }
 
     if (index >= len || NULL == p || network_len <= 0) {
+        printf("index:%d-%d, %p, network_len:%d\n", index, len, p, network_len);
         return -1;
     }
 
@@ -1923,7 +1985,7 @@
         sprintf(lynq_next_sta_cmd, "STA-NEXT %s", split_lines[0]);
         reply_len = MAX_RET;
         cmd_reply[0] = '\0';
-        ret = wpa_ctrl_request(lynq_wpa_ctrl, lynq_next_sta_cmd, strlen(lynq_next_sta_cmd), cmd_reply, &reply_len, NULL);
+        ret = local_wpa_ctrl_request(lynq_wpa_ctrl, lynq_next_sta_cmd, strlen(lynq_next_sta_cmd), cmd_reply, &reply_len, NULL);
         if (ret != 0 || memcmp(cmd_reply, "FAIL", 4) == 0) {
             printf("run %s fail \n", lynq_next_sta_cmd);
             break;
@@ -2214,7 +2276,7 @@
 //        reply_len = MAX_RET;
 //        cmd_reply[0] = '\0';
 //        printf("to call [%s]\n", cmd_str);
-//        ret = wpa_ctrl_request(s_lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL);
+//        ret = local_wpa_ctrl_request(s_lynq_wpa_ctrl, cmd_str, strlen(cmd_str), cmd_reply, &reply_len, NULL);
 //        if (ret != 0) {
 //            printf("call ##cmd_str fail %d\n", ret);
 //            return ret;
