diff --git a/frameworks/js/napi/include/async_callback_info.h b/frameworks/js/napi/include/async_callback_info.h index f60bbb9ea5cac582e72009e4e1fd1f525a4425d7..dfff5405c6fe0da789cafcf329898a17e8706a93 100644 --- a/frameworks/js/napi/include/async_callback_info.h +++ b/frameworks/js/napi/include/async_callback_info.h @@ -14,6 +14,7 @@ */ #ifndef ASYNC_CALLBACK_INFO_H #define ASYNC_CALLBACK_INFO_H +#include #include #include "napi/native_api.h" @@ -110,6 +111,7 @@ public: BusinessError error; CallbackDataType type; vector sensorInfos; + std::mutex asyncCallbackInfoMutex_; AsyncCallbackInfo(napi_env env, CallbackDataType type) : env(env), type(type) {} ~AsyncCallbackInfo() { diff --git a/frameworks/js/napi/src/sensor_js.cpp b/frameworks/js/napi/src/sensor_js.cpp index 1d80d11208e841e4506b92b0d91e3c35bc90a17d..2dd1d49dfb7d325814184b4158181034d92ab7b0 100644 --- a/frameworks/js/napi/src/sensor_js.cpp +++ b/frameworks/js/napi/src/sensor_js.cpp @@ -66,8 +66,9 @@ static bool CheckSubscribe(int32_t sensorTypeId) static bool copySensorData(sptr callbackInfo, SensorEvent *event) { - CHKPF(callbackInfo); CHKPF(event); + std::lock_guardstd::mutex dataLock(callbackInfo->asyncCallbackInfoMutex_); + CHKPF(callbackInfo); int32_t sensorTypeId = event->sensorTypeId; callbackInfo->data.sensorData.sensorTypeId = sensorTypeId; callbackInfo->data.sensorData.dataLength = event->dataLen; diff --git a/frameworks/js/napi/src/sensor_napi_utils.cpp b/frameworks/js/napi/src/sensor_napi_utils.cpp index f797e9686b10e67a3de9512b00741424fa270758..7fc5085e81e1dc59ad0b52b30028c726f9a4302c 100644 --- a/frameworks/js/napi/src/sensor_napi_utils.cpp +++ b/frameworks/js/napi/src/sensor_napi_utils.cpp @@ -551,6 +551,7 @@ void EmitUvEventLoop(sptr asyncCallbackInfo) napi_close_handle_scope(asyncCallbackInfo->env, scope); return; } + std::lock_guardstd::mutex dataLock(asyncCallbackInfo->asyncCallbackInfoMutex_); g_convertfuncList[asyncCallbackInfo->type](env, asyncCallbackInfo, result); if (napi_call_function(env, nullptr, callback, 1, &result[1], &callResult) != napi_ok) { SEN_HILOGE("napi_call_function callback fail");