From fe07bc652248d7f4b42626f5e8837d40c63f68cf Mon Sep 17 00:00:00 2001 From: liuyanzhi Date: Sun, 23 Apr 2023 06:42:49 +0000 Subject: [PATCH] fix NAPI Signed-off-by: liuyanzhi Change-Id: If78ba87b497b7bd398c0f2dc9763e8712cd64b7b --- frameworks/js/napi/src/ans_template.cpp | 14 +- frameworks/js/napi/src/cancel.cpp | 50 ++++- frameworks/js/napi/src/display_badge.cpp | 26 ++- frameworks/js/napi/src/distributed.cpp | 82 +++++++- frameworks/js/napi/src/disturb_mode.cpp | 38 +++- .../js/napi/src/enable_notification.cpp | 50 ++++- frameworks/js/napi/src/get_active.cpp | 38 +++- .../js/napi/src/manager/napi_cancel.cpp | 70 ++++++- .../napi/src/manager/napi_display_badge.cpp | 36 +++- .../js/napi/src/manager/napi_distributed.cpp | 132 +++++++++--- .../js/napi/src/manager/napi_disturb_mode.cpp | 50 ++++- .../src/manager/napi_enable_notification.cpp | 70 ++++++- .../js/napi/src/manager/napi_get_active.cpp | 53 ++++- .../js/napi/src/manager/napi_publish.cpp | 47 ++++- .../js/napi/src/manager/napi_remove_group.cpp | 17 +- frameworks/js/napi/src/manager/napi_slot.cpp | 188 +++++++++++++++--- .../js/napi/src/manager/napi_template.cpp | 19 +- frameworks/js/napi/src/publish.cpp | 38 +++- frameworks/js/napi/src/remove.cpp | 26 ++- frameworks/js/napi/src/slot.cpp | 134 +++++++++++-- frameworks/js/napi/src/subscribe.cpp | 14 +- .../js/napi/src/subscribe/napi_remove.cpp | 18 +- .../js/napi/src/subscribe/napi_subscribe.cpp | 36 +++- frameworks/js/napi/src/unsubscribe.cpp | 14 +- 24 files changed, 1103 insertions(+), 157 deletions(-) diff --git a/frameworks/js/napi/src/ans_template.cpp b/frameworks/js/napi/src/ans_template.cpp index 0321e1eaa..5386ac594 100644 --- a/frameworks/js/napi/src/ans_template.cpp +++ b/frameworks/js/napi/src/ans_template.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -107,7 +107,17 @@ napi_value IsSupportTemplate(napi_env env, napi_callback_info info) (void *)asyncCallbackinfo, &asyncCallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asyncCallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asyncCallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asyncCallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asyncCallbackinfo->info.callback); + } + napi_delete_async_work(env, asyncCallbackinfo->asyncWork); + delete asyncCallbackinfo; + asyncCallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asyncCallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/cancel.cpp b/frameworks/js/napi/src/cancel.cpp index 7f7e47b48..eac75b63f 100644 --- a/frameworks/js/napi/src/cancel.cpp +++ b/frameworks/js/napi/src/cancel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -160,7 +160,17 @@ napi_value Cancel(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, paras.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -214,7 +224,17 @@ napi_value CancelAll(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -272,7 +292,17 @@ napi_value CancelGroup(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -388,7 +418,17 @@ napi_value CancelAsBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, paras.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/display_badge.cpp b/frameworks/js/napi/src/display_badge.cpp index cced5ba2d..640e7b550 100644 --- a/frameworks/js/napi/src/display_badge.cpp +++ b/frameworks/js/napi/src/display_badge.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -169,7 +169,17 @@ napi_value DisplayBadge(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -245,7 +255,17 @@ napi_value IsBadgeDisplayed(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/distributed.cpp b/frameworks/js/napi/src/distributed.cpp index 659dc810a..d3139c312 100644 --- a/frameworks/js/napi/src/distributed.cpp +++ b/frameworks/js/napi/src/distributed.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -210,7 +210,17 @@ napi_value IsDistributedEnabled(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -268,7 +278,17 @@ napi_value EnableDistributed(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -325,7 +345,17 @@ napi_value EnableDistributedByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -383,7 +413,17 @@ napi_value EnableDistributedSelf(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -454,7 +494,17 @@ napi_value IsDistributedEnableByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -529,7 +579,17 @@ napi_value GetDeviceRemindType(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -636,7 +696,9 @@ napi_value SetSyncNotificationEnabledWithoutApp(napi_env env, napi_callback_info &asynccallbackinfo->asyncWork); if (napi_queue_async_work(env, asynccallbackinfo->asyncWork) != napi_ok) { - napi_delete_reference(env, asynccallbackinfo->info.callback); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } napi_delete_async_work(env, asynccallbackinfo->asyncWork); delete asynccallbackinfo; asynccallbackinfo = nullptr; @@ -746,7 +808,9 @@ napi_value GetSyncNotificationEnabledWithoutApp(napi_env env, napi_callback_info &asynccallbackinfo->asyncWork); if (napi_queue_async_work(env, asynccallbackinfo->asyncWork) != napi_ok) { - napi_delete_reference(env, asynccallbackinfo->info.callback); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } napi_delete_async_work(env, asynccallbackinfo->asyncWork); delete asynccallbackinfo; asynccallbackinfo = nullptr; diff --git a/frameworks/js/napi/src/disturb_mode.cpp b/frameworks/js/napi/src/disturb_mode.cpp index f4d4bd55c..5497348ec 100644 --- a/frameworks/js/napi/src/disturb_mode.cpp +++ b/frameworks/js/napi/src/disturb_mode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -191,7 +191,17 @@ napi_value SetDoNotDisturbDate(napi_env env, napi_callback_info info) }, (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -309,7 +319,17 @@ napi_value GetDoNotDisturbDate(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -373,7 +393,17 @@ napi_value SupportDoNotDisturbMode(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/enable_notification.cpp b/frameworks/js/napi/src/enable_notification.cpp index d870bae7b..0a0f64225 100644 --- a/frameworks/js/napi/src/enable_notification.cpp +++ b/frameworks/js/napi/src/enable_notification.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -174,7 +174,17 @@ napi_value EnableNotification(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -257,7 +267,17 @@ napi_value IsNotificationEnabled(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -307,7 +327,17 @@ napi_value IsNotificationEnabledSelf(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -357,7 +387,17 @@ napi_value RequestEnableNotification(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/get_active.cpp b/frameworks/js/napi/src/get_active.cpp index 1477ff598..eac680528 100644 --- a/frameworks/js/napi/src/get_active.cpp +++ b/frameworks/js/napi/src/get_active.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -101,7 +101,17 @@ napi_value GetAllActiveNotifications(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -194,7 +204,17 @@ napi_value GetActiveNotifications(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -266,7 +286,17 @@ napi_value GetActiveNotificationCount(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/manager/napi_cancel.cpp b/frameworks/js/napi/src/manager/napi_cancel.cpp index de99f633f..613ee7e69 100644 --- a/frameworks/js/napi/src/manager/napi_cancel.cpp +++ b/frameworks/js/napi/src/manager/napi_cancel.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -68,8 +68,21 @@ napi_value NapiCancel(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -121,8 +134,21 @@ napi_value NapiCancelAll(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -178,8 +204,21 @@ napi_value NapiCancelGroup(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -238,8 +277,21 @@ napi_value NapiCancelAsBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/manager/napi_display_badge.cpp b/frameworks/js/napi/src/manager/napi_display_badge.cpp index a10fd162e..f83f07de6 100644 --- a/frameworks/js/napi/src/manager/napi_display_badge.cpp +++ b/frameworks/js/napi/src/manager/napi_display_badge.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -72,8 +72,21 @@ napi_value NapiDisplayBadge(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -147,8 +160,21 @@ napi_value NapiIsBadgeDisplayed(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/manager/napi_distributed.cpp b/frameworks/js/napi/src/manager/napi_distributed.cpp index 45d928b28..eff4de1b2 100644 --- a/frameworks/js/napi/src/manager/napi_distributed.cpp +++ b/frameworks/js/napi/src/manager/napi_distributed.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -84,9 +84,21 @@ napi_value NapiIsDistributedEnabled(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -143,9 +155,21 @@ napi_value NapiEnableDistributed(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -201,9 +225,21 @@ napi_value NapiEnableDistributedByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -260,9 +296,21 @@ napi_value NapiEnableDistributedSelf(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -332,9 +380,21 @@ napi_value NapiIsDistributedEnableByBundle(napi_env env, napi_callback_info info (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -408,9 +468,21 @@ napi_value NapiGetDeviceRemindType(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -468,18 +540,25 @@ napi_value NapiSetSyncNotificationEnabledWithoutApp(napi_env env, napi_callback_ (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - if (napi_queue_async_work(env, asynccallbackinfo->asyncWork) != napi_ok) { - napi_delete_reference(env, asynccallbackinfo->info.callback); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } napi_delete_async_work(env, asynccallbackinfo->asyncWork); delete asynccallbackinfo; asynccallbackinfo = nullptr; - return Common::JSParaError(env, params.callback); } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); + } else { + return promise; } - return promise; } napi_value NapiGetSyncNotificationEnabledWithoutApp(napi_env env, napi_callback_info info) @@ -540,18 +619,25 @@ napi_value NapiGetSyncNotificationEnabledWithoutApp(napi_env env, napi_callback_ (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - if (napi_queue_async_work(env, asynccallbackinfo->asyncWork) != napi_ok) { - napi_delete_reference(env, asynccallbackinfo->info.callback); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } napi_delete_async_work(env, asynccallbackinfo->asyncWork); delete asynccallbackinfo; asynccallbackinfo = nullptr; - return Common::JSParaError(env, params.callback); } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); + } else { + return promise; } - return promise; } } // namespace NotificationNapi } // namespace OHOS \ No newline at end of file diff --git a/frameworks/js/napi/src/manager/napi_disturb_mode.cpp b/frameworks/js/napi/src/manager/napi_disturb_mode.cpp index 5f10b765c..a8943c3c8 100644 --- a/frameworks/js/napi/src/manager/napi_disturb_mode.cpp +++ b/frameworks/js/napi/src/manager/napi_disturb_mode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -73,9 +73,21 @@ napi_value NapiSetDoNotDisturbDate(napi_env env, napi_callback_info info) }, (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -153,9 +165,21 @@ napi_value NapiGetDoNotDisturbDate(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -218,9 +242,21 @@ napi_value NapiSupportDoNotDisturbMode(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/manager/napi_enable_notification.cpp b/frameworks/js/napi/src/manager/napi_enable_notification.cpp index 07a609928..970a3f3c1 100644 --- a/frameworks/js/napi/src/manager/napi_enable_notification.cpp +++ b/frameworks/js/napi/src/manager/napi_enable_notification.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -76,8 +76,21 @@ napi_value NapiEnableNotification(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -154,8 +167,21 @@ napi_value NapiIsNotificationEnabled(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -203,8 +229,21 @@ napi_value NapiIsNotificationEnabledSelf(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -250,8 +289,21 @@ napi_value NapiRequestEnableNotification(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/manager/napi_get_active.cpp b/frameworks/js/napi/src/manager/napi_get_active.cpp index c2eaa020b..22590b535 100644 --- a/frameworks/js/napi/src/manager/napi_get_active.cpp +++ b/frameworks/js/napi/src/manager/napi_get_active.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -103,8 +103,21 @@ napi_value NapiGetAllActiveNotifications(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -194,8 +207,21 @@ napi_value NapiGetActiveNotifications(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -264,8 +290,21 @@ napi_value NapiGetActiveNotificationCount(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/manager/napi_publish.cpp b/frameworks/js/napi/src/manager/napi_publish.cpp index 1abec2d77..e6fa2cfd5 100644 --- a/frameworks/js/napi/src/manager/napi_publish.cpp +++ b/frameworks/js/napi/src/manager/napi_publish.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -74,8 +74,21 @@ napi_value NapiPublish(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -134,7 +147,16 @@ napi_value NapiShowNotification(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } return nullptr; } @@ -192,8 +214,21 @@ napi_value NapiPublishAsBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/manager/napi_remove_group.cpp b/frameworks/js/napi/src/manager/napi_remove_group.cpp index c42b2e5f1..044f80cf7 100644 --- a/frameworks/js/napi/src/manager/napi_remove_group.cpp +++ b/frameworks/js/napi/src/manager/napi_remove_group.cpp @@ -132,8 +132,21 @@ napi_value NapiRemoveGroupByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/manager/napi_slot.cpp b/frameworks/js/napi/src/manager/napi_slot.cpp index 5140ded7b..9ced91051 100644 --- a/frameworks/js/napi/src/manager/napi_slot.cpp +++ b/frameworks/js/napi/src/manager/napi_slot.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -76,8 +76,21 @@ napi_value NapiAddSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -130,8 +143,21 @@ napi_value NapiAddSlots(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -185,8 +211,21 @@ napi_value NapiSetSlotByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -259,8 +298,21 @@ napi_value NapiGetSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -316,8 +368,21 @@ napi_value NapiGetSlotNumByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -403,9 +468,21 @@ napi_value NapiGetSlots(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -493,8 +570,21 @@ napi_value NapiGetSlotsByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -548,8 +638,21 @@ napi_value NapiRemoveSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -601,8 +704,21 @@ napi_value NapiRemoveAllSlots(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -657,8 +773,21 @@ napi_value NapiEnableNotificationSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -714,8 +843,21 @@ napi_value NapiIsEnableNotificationSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/manager/napi_template.cpp b/frameworks/js/napi/src/manager/napi_template.cpp index d3297da6c..88c7d215b 100644 --- a/frameworks/js/napi/src/manager/napi_template.cpp +++ b/frameworks/js/napi/src/manager/napi_template.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -70,8 +70,21 @@ napi_value NapiIsSupportTemplate(napi_env env, napi_callback_info info) (void *)asyncCallbackinfo, &asyncCallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asyncCallbackinfo->asyncWork)); - if (asyncCallbackinfo->info.isCallback) { + bool isCallback = asyncCallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asyncCallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asyncCallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asyncCallbackinfo->info, Common::NapiGetNull(env)); + if (asyncCallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asyncCallbackinfo->info.callback); + } + napi_delete_async_work(env, asyncCallbackinfo->asyncWork); + delete asyncCallbackinfo; + asyncCallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/publish.cpp b/frameworks/js/napi/src/publish.cpp index f19f339b9..21dc9b50f 100644 --- a/frameworks/js/napi/src/publish.cpp +++ b/frameworks/js/napi/src/publish.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -148,7 +148,17 @@ napi_value Publish(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -345,7 +355,17 @@ napi_value ShowNotification(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } return nullptr; } @@ -462,7 +482,17 @@ napi_value PublishAsBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/remove.cpp b/frameworks/js/napi/src/remove.cpp index e5944aa07..4142efbd3 100644 --- a/frameworks/js/napi/src/remove.cpp +++ b/frameworks/js/napi/src/remove.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -348,7 +348,17 @@ napi_value RemoveAll(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -416,7 +426,17 @@ napi_value RemoveGroupByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/slot.cpp b/frameworks/js/napi/src/slot.cpp index 9afff9aec..097087142 100644 --- a/frameworks/js/napi/src/slot.cpp +++ b/frameworks/js/napi/src/slot.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -531,7 +531,17 @@ napi_value AddSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, paras.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -586,7 +596,17 @@ napi_value AddSlots(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, paras.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -642,7 +662,17 @@ napi_value SetSlotByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -718,7 +748,17 @@ napi_value GetSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, paras.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -776,7 +816,17 @@ napi_value GetSlotNumByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -864,7 +914,17 @@ napi_value GetSlots(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -954,7 +1014,17 @@ napi_value GetSlotsByBundle(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -1010,7 +1080,17 @@ napi_value RemoveSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, paras.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -1064,7 +1144,17 @@ napi_value RemoveAllSlots(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -1181,7 +1271,17 @@ napi_value EnableNotificationSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); @@ -1291,7 +1391,17 @@ napi_value IsEnableNotificationSlot(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, params.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/subscribe.cpp b/frameworks/js/napi/src/subscribe.cpp index 58a7cc2a8..e707ca532 100644 --- a/frameworks/js/napi/src/subscribe.cpp +++ b/frameworks/js/napi/src/subscribe.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -1209,7 +1209,17 @@ napi_value Subscribe(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); diff --git a/frameworks/js/napi/src/subscribe/napi_remove.cpp b/frameworks/js/napi/src/subscribe/napi_remove.cpp index 206f2b7a4..94877913b 100644 --- a/frameworks/js/napi/src/subscribe/napi_remove.cpp +++ b/frameworks/js/napi/src/subscribe/napi_remove.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -141,9 +141,21 @@ napi_value NapiRemoveAll(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } - if (asynccallbackinfo->info.isCallback) { + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/subscribe/napi_subscribe.cpp b/frameworks/js/napi/src/subscribe/napi_subscribe.cpp index b73236cfa..708450714 100644 --- a/frameworks/js/napi/src/subscribe/napi_subscribe.cpp +++ b/frameworks/js/napi/src/subscribe/napi_subscribe.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Huawei Device Co., Ltd. + * Copyright (c) 2022-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -98,8 +98,21 @@ napi_value NapiSubscribe(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; @@ -168,8 +181,21 @@ napi_value NapiUnsubscribe(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); - if (asynccallbackinfo->info.isCallback) { + bool isCallback = asynccallbackinfo->info.isCallback; + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + asynccallbackinfo->info.errorCode = ERROR_INTERNAL_ERROR; + Common::CreateReturnValue(env, asynccallbackinfo->info, Common::NapiGetNull(env)); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + } + + if (isCallback) { return Common::NapiGetNull(env); } else { return promise; diff --git a/frameworks/js/napi/src/unsubscribe.cpp b/frameworks/js/napi/src/unsubscribe.cpp index f5a4a0da1..fb2d3d063 100644 --- a/frameworks/js/napi/src/unsubscribe.cpp +++ b/frameworks/js/napi/src/unsubscribe.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -121,7 +121,17 @@ napi_value Unsubscribe(napi_env env, napi_callback_info info) (void *)asynccallbackinfo, &asynccallbackinfo->asyncWork); - NAPI_CALL(env, napi_queue_async_work(env, asynccallbackinfo->asyncWork)); + napi_status status = napi_queue_async_work(env, asynccallbackinfo->asyncWork); + if (status != napi_ok) { + ANS_LOGE("napi_queue_async_work failed return: %{public}d", status); + if (asynccallbackinfo->info.callback != nullptr) { + napi_delete_reference(env, asynccallbackinfo->info.callback); + } + napi_delete_async_work(env, asynccallbackinfo->asyncWork); + delete asynccallbackinfo; + asynccallbackinfo = nullptr; + return Common::JSParaError(env, paras.callback); + } if (asynccallbackinfo->info.isCallback) { return Common::NapiGetNull(env); -- Gitee