提交 7a4a434d 编写于 作者: 1 18392170496

remove cleanup hook

Signed-off-by: N18392170496 <magentang4@huawei.com>
上级 7f082076
......@@ -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<IRemoteObject> Get();
void Set(sptr<IRemoteObject> object);
void attachLocalInterface(napi_value localInterface, std::string &descriptor);
......
......@@ -181,17 +181,6 @@ static NativeValue *RemoteObjectAttachCb(NativeEngine *engine, void *value, void
return reinterpret_cast<NativeValue *>(jsRemoteObject);
}
static void OnEnvCleanUp(void *data)
{
if (data == nullptr) {
ZLOGE(LOG_LABEL, "data is null");
return;
}
NAPIRemoteObjectHolder *holder = reinterpret_cast<NAPIRemoteObjectHolder *>(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;
}
......
......@@ -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<NAPIRemoteObjectHolder *>(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<IRemoteObject> NAPIRemoteObjectHolder::Get()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册