From 7a4a434debc295c66aa6d63ec13e9434ebbee48d Mon Sep 17 00:00:00 2001 From: 18392170496 Date: Mon, 7 Aug 2023 15:22:32 +0800 Subject: [PATCH] remove cleanup hook Signed-off-by: 18392170496 --- .../include/napi_remote_object_holder.h | 2 +- .../napi_common/source/napi_remote_object.cpp | 14 ----------- .../source/napi_remote_object_holder.cpp | 25 ++++++++++++++++--- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/ipc/native/src/napi_common/include/napi_remote_object_holder.h b/ipc/native/src/napi_common/include/napi_remote_object_holder.h index eb53fba..204e5a1 100644 --- a/ipc/native/src/napi_common/include/napi_remote_object_holder.h +++ b/ipc/native/src/napi_common/include/napi_remote_object_holder.h @@ -27,7 +27,7 @@ namespace OHOS { class NAPIRemoteObjectHolder : public RefBase { public: explicit NAPIRemoteObjectHolder(napi_env env, const std::u16string &descriptor, napi_value thisVar); - ~NAPIRemoteObjectHolder() = default; + ~NAPIRemoteObjectHolder(); sptr Get(); void Set(sptr object); void attachLocalInterface(napi_value localInterface, std::string &descriptor); diff --git a/ipc/native/src/napi_common/source/napi_remote_object.cpp b/ipc/native/src/napi_common/source/napi_remote_object.cpp index db34409..1a0a7c5 100644 --- a/ipc/native/src/napi_common/source/napi_remote_object.cpp +++ b/ipc/native/src/napi_common/source/napi_remote_object.cpp @@ -181,17 +181,6 @@ static NativeValue *RemoteObjectAttachCb(NativeEngine *engine, void *value, void return reinterpret_cast(jsRemoteObject); } -static void OnEnvCleanUp(void *data) -{ - if (data == nullptr) { - ZLOGE(LOG_LABEL, "data is null"); - return; - } - NAPIRemoteObjectHolder *holder = reinterpret_cast(data); - // js env has been destrcted, clear saved env info, and check befor use it - holder->CleanJsEnv(); -} - napi_value RemoteObject_JS_Constructor(napi_env env, napi_callback_info info) { // new napi remote object @@ -224,9 +213,6 @@ napi_value RemoteObject_JS_Constructor(napi_env env, napi_callback_info info) // connect native object to js thisVar napi_status status = napi_wrap(env, thisVar, holder, RemoteObjectHolderFinalizeCb, nullptr, nullptr); NAPI_ASSERT(env, status == napi_ok, "wrap js RemoteObject and native holder failed"); - // register listener for env destruction - status = napi_add_env_cleanup_hook(env, OnEnvCleanUp, holder); - NAPI_ASSERT(env, status == napi_ok, "add cleanup hook failed"); return thisVar; } diff --git a/ipc/native/src/napi_common/source/napi_remote_object_holder.cpp b/ipc/native/src/napi_common/source/napi_remote_object_holder.cpp index 56a479b..3341ee5 100644 --- a/ipc/native/src/napi_common/source/napi_remote_object_holder.cpp +++ b/ipc/native/src/napi_common/source/napi_remote_object_holder.cpp @@ -23,10 +23,16 @@ namespace OHOS { static constexpr OHOS::HiviewDFX::HiLogLabel LOG_LABEL = { LOG_CORE, LOG_ID_IPC, "napi_remoteObject_holder" }; -struct DeleteJsRefParam { - napi_env env; - napi_ref thisVarRef; -}; +static void OnEnvCleanUp(void *data) +{ + if (data == nullptr) { + ZLOGE(LOG_LABEL, "data is null"); + return; + } + NAPIRemoteObjectHolder *holder = reinterpret_cast(data); + // js env has been destrcted, clear saved env info, and check befor use it + holder->CleanJsEnv(); +} NAPIRemoteObjectHolder::NAPIRemoteObjectHolder(napi_env env, const std::u16string &descriptor, napi_value thisVar) : env_(env), descriptor_(descriptor), sptrCachedObject_(nullptr), wptrCachedObject_(nullptr), @@ -36,6 +42,17 @@ NAPIRemoteObjectHolder::NAPIRemoteObjectHolder(napi_env env, const std::u16strin // create weak ref, do not need to delete, // increase ref count when the JS object will transfer to another thread or process. napi_create_reference(env, thisVar, 0, &jsObjectRef_); + + // register listener for env destruction + status = napi_add_env_cleanup_hook(env, OnEnvCleanUp, holder); + if (status != napi_ok) { + ZLOGE(LOG_LABEL, "add cleanup hook failed"); + } +} + +NAPIRemoteObjectHolder::~NAPIRemoteObjectHolder() +{ + napi_remove_env_cleanup_hook(env_, OnEnvCleanUp, this); } sptr NAPIRemoteObjectHolder::Get() -- GitLab