[Bugfix][T108][bug-view-1534]Fix the issue of multi-threaded API call errors

Only Configure: No
Affected branch: GSW_V1453
Affected module: system
Is it affected on IC: only ASR
Self-test: yes
Doc Update: no

Change-Id: I89b0fc98b13b5586e1aebd9c14ff69deaed28d04
diff --git a/mbtk/libgsw_lib/gsw_at_interface.c b/mbtk/libgsw_lib/gsw_at_interface.c
index 67a61a1..2d9cefd 100755
--- a/mbtk/libgsw_lib/gsw_at_interface.c
+++ b/mbtk/libgsw_lib/gsw_at_interface.c
@@ -121,7 +121,7 @@
 }LYNQ_AT_E;

 

 static mbtk_log fun_ptr_log = NULL;

-void *dlHandle_at = NULL;

+static void *dlHandle_at = NULL;

 char *lynqLib_at = "/lib/libmbtk_lib.so";

 char *output = NULL;

 int sockfd = 0;

@@ -315,12 +315,7 @@
     {

         return GSW_HAL_NORMAL_FAIL;

     }

-    dlHandle_at = dlopen(lynqLib_at, RTLD_NOW);

-    fun_ptr_log = (mbtk_log)dlsym(dlHandle_at, "mbtk_log");

-    if(fun_ptr_log == NULL || dlHandle_at == NULL)

-    {

-        return GSW_HAL_NORMAL_FAIL;

-    }

+    

     memcpy(buffer_at, atcmd, strlen(atcmd));

     tmp = func;

     LOGD("lynq_reg_third_at start\n");

@@ -337,6 +332,12 @@
 

 int32_t gsw_sdk_at_init(void)

 {

+    dlHandle_at = dlopen(lynqLib_at, RTLD_NOW);

+    fun_ptr_log = (mbtk_log)dlsym(dlHandle_at, "mbtk_log");

+    if(fun_ptr_log == NULL || dlHandle_at == NULL)

+    {

+        return GSW_HAL_NORMAL_FAIL;

+    }

     return GSW_HAL_SUCCESS;

 }

 

diff --git a/mbtk/libgsw_lib/gsw_oem_rw_interface.c b/mbtk/libgsw_lib/gsw_oem_rw_interface.c
index e0d0877..8d34023 100755
--- a/mbtk/libgsw_lib/gsw_oem_rw_interface.c
+++ b/mbtk/libgsw_lib/gsw_oem_rw_interface.c
@@ -11,20 +11,20 @@
 #include "gsw_oem_rw_interface.h"

 

 

-#ifndef LOG_ERR_LEVEL
-#define LOG_ERR_LEVEL  3      /* error conditions */
-#endif
-#ifndef LOG_WARN_LEVEL
-#define LOG_WARN_LEVEL 4   /* warning conditions */
-#endif
-#ifndef LOG_INFO_LEVEL
-#define LOG_INFO_LEVEL 6      /* informational */
-#endif
-#ifndef LOG_DEBUG_LEVEL
-#define LOG_DEBUG_LEVEL 7     /* debug-level messages */
-#endif
-#ifndef LOG_VERBOSE_LEVEL
-#define LOG_VERBOSE_LEVEL 8
+#ifndef LOG_ERR_LEVEL

+#define LOG_ERR_LEVEL  3      /* error conditions */

+#endif

+#ifndef LOG_WARN_LEVEL

+#define LOG_WARN_LEVEL 4   /* warning conditions */

+#endif

+#ifndef LOG_INFO_LEVEL

+#define LOG_INFO_LEVEL 6      /* informational */

+#endif

+#ifndef LOG_DEBUG_LEVEL

+#define LOG_DEBUG_LEVEL 7     /* debug-level messages */

+#endif

+#ifndef LOG_VERBOSE_LEVEL

+#define LOG_VERBOSE_LEVEL 8

 #endif

 

 #define ERASE_BLOCK_SIZE (256*1024)

@@ -35,73 +35,73 @@
 

 #define StatFunc(x,y) stat(x,y)

 

-#define LOGV(fmt, args ...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

-    } while(0)
-
-#define LOGI(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_INFO_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

-    } while(0)
-
-#define LOGD(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

-    } while(0)
-
-#define LOGW(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_WARN_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

-    } while(0)
-
-#define LOGE(fmt, args...) \
-    do{ \
+#define LOGV(fmt, args ...) \

+    do{ \

         char *file_ptr_1001 = __FILE__; \

-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        fun_ptr_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+#define LOGI(fmt, args...) \

+    do{ \

+        char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        fun_ptr_log(LOG_INFO_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+#define LOGD(fmt, args...) \

+    do{ \

+        char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        fun_ptr_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+#define LOGW(fmt, args...) \

+    do{ \

+        char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        fun_ptr_log(LOG_WARN_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+#define LOGE(fmt, args...) \

+    do{ \

+        char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

         fun_ptr_log(LOG_ERR_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \

     } while(0)

     

@@ -156,19 +156,19 @@
     return 0;

 }

 

-static void deinit_fun_handle()

-{

-    if(handle != NULL)

-    {

-        dlclose(handle);

-        handle = NULL;

-    }

+// static void deinit_fun_handle()

+// {

+//     if(handle != NULL)

+//     {

+//         dlclose(handle);

+//         handle = NULL;

+//     }

     

-    fun_ptr_log = NULL;

-    mbtk_write_fun_ptr = NULL;

-    mbtk_read_fun_ptr = NULL;

+//     fun_ptr_log = NULL;

+//     mbtk_write_fun_ptr = NULL;

+//     mbtk_read_fun_ptr = NULL;

     

-}

+// }

 

 /**

  * @brief Read data from spec block of flash

@@ -188,14 +188,14 @@
     if(ret == -1)

     {

         printf(" init_fun_handle error ret %d\n",ret);

-        deinit_fun_handle();

+        //deinit_fun_handle();

         return GSW_HAL_NORMAL_FAIL;

     }

    

     if (!data || !len) 

     {

         LOGE("invalid :data or len us NULL\n");

-        deinit_fun_handle();

+        //deinit_fun_handle();

         return GSW_HAL_ARG_INVALID;

     }

 

@@ -203,7 +203,7 @@
     if (temp_buffer == NULL) 

     {

         LOGE("Failed to allocate read buffer ");

-        deinit_fun_handle();

+        //deinit_fun_handle();

         return -1;

     }

     

@@ -214,13 +214,13 @@
     {

         LOGE("mbtk_read_fun_ptr  failed");

         free(temp_buffer); 

-        deinit_fun_handle();

+        //deinit_fun_handle();

         return GSW_HAL_NORMAL_FAIL;

     }

     *len = actual_len;

     memcpy(data, temp_buffer, *len);

     free(temp_buffer); 

-    deinit_fun_handle();

+    //deinit_fun_handle();

     

     return GSW_HAL_SUCCESS;

 }

@@ -241,13 +241,13 @@
     if(ret == -1)

     {

         printf("init log error ret %d\n",ret);

-        deinit_fun_handle();

+        //deinit_fun_handle();

         return GSW_HAL_NORMAL_FAIL;

     }

     if (!data || len > ERASE_BLOCK_SIZE) 

     {

         LOGE("invalid data is NULL ");

-        deinit_fun_handle();

+        //deinit_fun_handle();

         return GSW_HAL_ARG_INVALID;

     }

     

@@ -255,9 +255,9 @@
     if(ret != 0)

     {

         LOGE("mbtk_write_fun_ptr  failed");

-        deinit_fun_handle();

+        //deinit_fun_handle();

         return GSW_HAL_NORMAL_FAIL;

     }

-    deinit_fun_handle();

+    //deinit_fun_handle();

     return GSW_HAL_SUCCESS;

 }

diff --git a/mbtk/libgsw_lib/gsw_pm_interface.c b/mbtk/libgsw_lib/gsw_pm_interface.c
index 25acf7a..886a512 100755
--- a/mbtk/libgsw_lib/gsw_pm_interface.c
+++ b/mbtk/libgsw_lib/gsw_pm_interface.c
@@ -127,7 +127,7 @@
 static mbtk_lock_name_s lock_name[LOCK_MAX_SIZE]={0};

 

 static mbtk_log fun_ptr_log = NULL;

-void *dlHandle_sleep = NULL;

+static void *dlHandle_sleep = NULL;

 char *lynqLib_sleep = "/lib/libmbtk_lib.so";

 

 

@@ -161,12 +161,8 @@
     if(ret < 0)

     {

         LOGE("mbtk_autosuspend_enable FAIL.\n");

-        dlclose(dlHandle_sleep);

-        dlHandle_sleep = NULL;

         return GSW_HAL_NORMAL_FAIL;

     }

-    dlclose(dlHandle_sleep);

-    dlHandle_sleep = NULL;

     return GSW_HAL_SUCCESS;

 }

 

@@ -185,12 +181,8 @@
     if(ret < 0)

     {

         LOGE("mbtk_autosuspend_enable FAIL.\n");

-        dlclose(dlHandle_sleep);

-        dlHandle_sleep = NULL;

         return GSW_HAL_NORMAL_FAIL;

     }

-    dlclose(dlHandle_sleep);

-    dlHandle_sleep = NULL;

     return GSW_HAL_SUCCESS;

 }

 

@@ -209,8 +201,6 @@
     if(ret < 0)

     {

         LOGE("mbtk_lpm_init FAIL.\n");

-        dlclose(dlHandle_sleep);

-        dlHandle_sleep = NULL;

         return GSW_HAL_NORMAL_FAIL;

     }

     return GSW_HAL_SUCCESS;

@@ -248,8 +238,6 @@
     if(ret < 0)

     {

         LOGE("mbtk_wakelock_unlock FAIL.\n");

-        dlclose(dlHandle_sleep);

-        dlHandle_sleep = NULL;

         return GSW_HAL_NORMAL_FAIL;

     }

 

@@ -258,8 +246,6 @@
     if(ret < 0)

     {

         LOGE("mbtk_wakelock_destroy FAIL.\n");

-        dlclose(dlHandle_sleep);

-        dlHandle_sleep = NULL;

         return GSW_HAL_NORMAL_FAIL;

     }

     if (lock_name[i].name != NULL)

@@ -268,9 +254,6 @@
         lock_name[i].name = NULL;

         lock_name[i].fd = -1;

     }

-    

-    dlclose(dlHandle_sleep);

-    dlHandle_sleep = NULL;

     return GSW_HAL_SUCCESS;

 }

 

@@ -326,8 +309,6 @@
     lock_name[i].fd = lock_fd;

     ret = GSW_HAL_SUCCESS;

 end:

-    dlclose(dlHandle_sleep);

-    dlHandle_sleep = NULL;

     return ret;

 }