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