From 56c69eafc55bd6107648d8f97d7a88af8d57aabc Mon Sep 17 00:00:00 2001 From: derek Date: Thu, 17 Feb 2022 21:00:33 +0800 Subject: [PATCH] bugfix: fix app crash due to napi value create not in js thread Signed-off-by: derek Change-Id: I6db6f5028d2d5a6e93d06732424584f01fd78d88 --- .../kits/napi/ans/src/reminder/publish.cpp | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/interfaces/kits/napi/ans/src/reminder/publish.cpp b/interfaces/kits/napi/ans/src/reminder/publish.cpp index 16084497d..d0033726d 100644 --- a/interfaces/kits/napi/ans/src/reminder/publish.cpp +++ b/interfaces/kits/napi/ans/src/reminder/publish.cpp @@ -33,6 +33,7 @@ struct AsyncCallbackInfo { napi_async_work asyncWork = nullptr; int32_t reminderId = -1; std::shared_ptr reminder = nullptr; + std::vector> validReminders; NotificationNapi::CallbackPromiseInfo info; napi_value result = nullptr; }; @@ -545,18 +546,17 @@ napi_value GetValidReminders(napi_env env, napi_callback_info info) [](napi_env env, void *data) { ANSR_LOGI("GetValid reminders napi_create_async_work start"); AsyncCallbackInfo *asynccallbackinfo = (AsyncCallbackInfo *)data; - std::vector> validReminders; - asynccallbackinfo->info.errorCode = ReminderHelper::GetValidReminders(validReminders); - if (asynccallbackinfo->info.errorCode != ERR_OK) { - asynccallbackinfo->result = NotificationNapi::Common::NapiGetNull(env); - return; - } - napi_value arr = nullptr; - GetValidRemindersInner(env, validReminders, arr); - asynccallbackinfo->result = arr; + asynccallbackinfo->info.errorCode = ReminderHelper::GetValidReminders(asynccallbackinfo->validReminders); }, [](napi_env env, napi_status status, void *data) { AsyncCallbackInfo *asynccallbackinfo = (AsyncCallbackInfo *)data; + + if (asynccallbackinfo->info.errorCode != ERR_OK) { + asynccallbackinfo->result = NotificationNapi::Common::NapiGetNull(env); + } else { + GetValidRemindersInner(env, asynccallbackinfo->validReminders, asynccallbackinfo->result); + } + NotificationNapi::Common::ReturnCallbackPromise( env, asynccallbackinfo->info, asynccallbackinfo->result); if (asynccallbackinfo->info.callback != nullptr) { @@ -609,15 +609,18 @@ napi_value PublishReminder(napi_env env, napi_callback_info info) AsyncCallbackInfo *asynccallbackinfo = (AsyncCallbackInfo *)data; asynccallbackinfo->info.errorCode = ReminderHelper::PublishReminder(*(asynccallbackinfo->reminder)); ANSR_LOGD("Return reminderId=%{public}d", asynccallbackinfo->reminder->GetReminderId()); - - // reminderId - napi_value napiReminderId = nullptr; - napi_create_int32(env, asynccallbackinfo->reminder->GetReminderId(), &napiReminderId); - asynccallbackinfo->result = napiReminderId; }, [](napi_env env, napi_status status, void *data) { ANSR_LOGI("Publish napi_create_async_work complete start"); AsyncCallbackInfo *asynccallbackinfo = (AsyncCallbackInfo *)data; + + // reminderId + if (asynccallbackinfo->info.errorCode == ERR_OK) { + napi_create_int32(env, asynccallbackinfo->reminder->GetReminderId(), &(asynccallbackinfo->result)); + } else { + napi_create_int32(env, -1, &(asynccallbackinfo->result)); + } + NotificationNapi::Common::ReturnCallbackPromise( env, asynccallbackinfo->info, asynccallbackinfo->result); if (asynccallbackinfo->info.callback != nullptr) { -- Gitee