diff --git a/interfaces/plugin/include/sensor_napi_utils.h b/interfaces/plugin/include/sensor_napi_utils.h index 47175c7a68dc99299dd29f90053079c144e4944f..ecc8ad7fcf1b6cac35cd3e10c990133324b40c0a 100644 --- a/interfaces/plugin/include/sensor_napi_utils.h +++ b/interfaces/plugin/include/sensor_napi_utils.h @@ -110,7 +110,7 @@ bool GetCppBool(napi_value value, napi_env env); void EmitAsyncCallbackWork(AsyncCallbackInfo *async_callback_info); -void EmitUvEventLoop(AsyncCallbackInfo *async_callback_info); +void EmitUvEventLoop(AsyncCallbackInfo **async_callback_info); int64_t GetCppInt64(napi_value value, napi_env env); diff --git a/interfaces/plugin/src/sensor_js.cpp b/interfaces/plugin/src/sensor_js.cpp index e23255e3683dbab555a06d28688f1d74e6d2bf49..c5c54884f04e1203e54c752eef0b81f51d46381f 100644 --- a/interfaces/plugin/src/sensor_js.cpp +++ b/interfaces/plugin/src/sensor_js.cpp @@ -62,7 +62,7 @@ static void DataCallbackImpl(SensorEvent *event) return; } onCallbackInfo->type = ON_CALLBACK; - EmitUvEventLoop((struct AsyncCallbackInfo *)(onCallbackInfo)); + EmitUvEventLoop(&g_onCallbackInfos[sensorTypeId]); } if (g_onceCallbackInfos.find(sensorTypeId) == g_onceCallbackInfos.end()) { @@ -79,7 +79,7 @@ static void DataCallbackImpl(SensorEvent *event) return; } onceCallbackInfo->type = ONCE_CALLBACK; - EmitUvEventLoop((struct AsyncCallbackInfo *)(onceCallbackInfo)); + EmitUvEventLoop(&g_onceCallbackInfos[sensorTypeId]); if (g_onCallbackInfos.find(sensorTypeId) == g_onCallbackInfos.end()) { HiLog::Debug(LABEL, "%{public}s no subscription to change sensor data, need to cancel registration", __func__); UnsubscribeSensor(sensorTypeId); diff --git a/interfaces/plugin/src/sensor_napi_utils.cpp b/interfaces/plugin/src/sensor_napi_utils.cpp index 34eb1113962e65984f444e7705f7da401af56826..047a15ccea9802056e1fd6b0ed77ff674b0dac93 100644 --- a/interfaces/plugin/src/sensor_napi_utils.cpp +++ b/interfaces/plugin/src/sensor_napi_utils.cpp @@ -405,11 +405,15 @@ void EmitAsyncCallbackWork(AsyncCallbackInfo *asyncCallbackInfo) HiLog::Debug(LABEL, "%{public}s end", __func__); } -void EmitUvEventLoop(AsyncCallbackInfo *asyncCallbackInfo) +void EmitUvEventLoop(AsyncCallbackInfo **asyncCallbackInfo) { uv_loop_s *loop(nullptr); - HiLog::Error(LABEL, "%{public}s env: %{public}p", __func__, asyncCallbackInfo->env); - napi_get_uv_event_loop(asyncCallbackInfo->env, &loop); + if (asyncCallbackInfo == nullptr || *asyncCallbackInfo == nullptr + || (*asyncCallbackInfo)->env == nullptr) { + HiLog::Error(LABEL, "%{public}s asyncCallbackInfo is null", __func__); + return; + } + napi_get_uv_event_loop((*asyncCallbackInfo)->env, &loop); if (loop == nullptr) { HiLog::Error(LABEL, "%{public}s loop is null", __func__); return; @@ -421,19 +425,16 @@ void EmitUvEventLoop(AsyncCallbackInfo *asyncCallbackInfo) } work->data = reinterpret_cast(asyncCallbackInfo); uv_queue_work(loop, work, [] (uv_work_t *work) { }, [] (uv_work_t *work, int status) { - AsyncCallbackInfo *asyncCallbackInfo = reinterpret_cast(work->data); - if (asyncCallbackInfo == nullptr) { + AsyncCallbackInfo *asyncCallbackInfo = *reinterpret_cast(work->data); + if (asyncCallbackInfo == nullptr || asyncCallbackInfo->env == nullptr + || asyncCallbackInfo->callback[0] == nullptr) { HiLog::Error(LABEL, "%{public}s asyncCallbackInfo is null", __func__); return; } napi_env env = asyncCallbackInfo->env; - napi_value undefined; + napi_value undefined = nullptr; napi_get_undefined(env, &undefined); - if (asyncCallbackInfo->callback[0] == nullptr) { - HiLog::Error(LABEL, "%{public}s callback is null", __func__); - return; - } - napi_value callback; + napi_value callback = nullptr; napi_get_reference_value(env, asyncCallbackInfo->callback[0], &callback); napi_value callResult = nullptr; napi_value result[2] = {0};