Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
communication_ipc
提交
746bb76f
C
communication_ipc
项目概览
OpenHarmony
/
communication_ipc
12 个月 前同步成功
通知
20
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
communication_ipc
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
746bb76f
编写于
5月 29, 2023
作者:
S
shufewhx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix memleak problem in uv_work
Signed-off-by:
N
shufewhx
<
wanghaoxu1@huawei.com
>
上级
e5e6947f
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
49 addition
and
0 deletion
+49
-0
ipc/native/src/napi_common/include/napi_remote_object_internal.h
...ive/src/napi_common/include/napi_remote_object_internal.h
+2
-0
ipc/native/src/napi_common/source/napi_remote_object.cpp
ipc/native/src/napi_common/source/napi_remote_object.cpp
+44
-0
ipc/native/src/napi_common/source/napi_remote_proxy_holder.cpp
...ative/src/napi_common/source/napi_remote_proxy_holder.cpp
+3
-0
未找到文件。
ipc/native/src/napi_common/include/napi_remote_object_internal.h
浏览文件 @
746bb76f
...
@@ -60,6 +60,8 @@ private:
...
@@ -60,6 +60,8 @@ private:
int
result
;
int
result
;
};
};
int
OnJsRemoteRequest
(
CallbackParam
*
jsParam
);
int
OnJsRemoteRequest
(
CallbackParam
*
jsParam
);
static
void
RemoveParcelWrap
(
CallbackParam
*
param
,
bool
isMessageSequence
,
napi_value
jsData
);
};
};
struct
SendRequestParam
{
struct
SendRequestParam
{
...
...
ipc/native/src/napi_common/source/napi_remote_object.cpp
浏览文件 @
746bb76f
...
@@ -321,6 +321,23 @@ void NAPI_RemoteObject_resetOldCallingInfo(napi_env env, NAPI_CallingInfo &oldCa
...
@@ -321,6 +321,23 @@ void NAPI_RemoteObject_resetOldCallingInfo(napi_env env, NAPI_CallingInfo &oldCa
napi_set_named_property
(
env
,
global
,
"activeStatus_"
,
oldCallingInfo
.
activeStatus
);
napi_set_named_property
(
env
,
global
,
"activeStatus_"
,
oldCallingInfo
.
activeStatus
);
}
}
void
NAPIRemoteObject
::
RemoveParcelWrap
(
CallbackParam
*
param
,
bool
isMessageSequence
,
napi_value
jsData
)
{
NAPI_MessageSequence
*
napiDataSequence
=
nullptr
;
napi_remove_wrap
(
param
->
env
,
jsData
,
(
void
**
)
&
napiDataSequence
);
if
(
napiDataSequence
==
nullptr
)
{
ZLOGE
(
LOG_LABEL
,
"RemoveParcelWrap fail, wrap is empty!"
);
return
;
}
if
(
isMessageSequence
)
{
ZLOGW
(
LOG_LABEL
,
"delete MessageSequence jsData"
);
delete
reinterpret_cast
<
NAPI_MessageSequence
*>
(
napiDataSequence
);
}
else
{
ZLOGW
(
LOG_LABEL
,
"delete MessageParcel jsData"
);
delete
reinterpret_cast
<
NAPI_MessageParcel
*>
(
napiDataSequence
);
}
}
int
NAPIRemoteObject
::
OnJsRemoteRequest
(
CallbackParam
*
jsParam
)
int
NAPIRemoteObject
::
OnJsRemoteRequest
(
CallbackParam
*
jsParam
)
{
{
uv_loop_s
*
loop
=
nullptr
;
uv_loop_s
*
loop
=
nullptr
;
...
@@ -337,6 +354,8 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -337,6 +354,8 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
uv_queue_work
(
loop
,
work
,
[](
uv_work_t
*
work
)
{},
[](
uv_work_t
*
work
,
int
status
)
{
uv_queue_work
(
loop
,
work
,
[](
uv_work_t
*
work
)
{},
[](
uv_work_t
*
work
,
int
status
)
{
ZLOGI
(
LOG_LABEL
,
"enter thread pool"
);
ZLOGI
(
LOG_LABEL
,
"enter thread pool"
);
CallbackParam
*
param
=
reinterpret_cast
<
CallbackParam
*>
(
work
->
data
);
CallbackParam
*
param
=
reinterpret_cast
<
CallbackParam
*>
(
work
->
data
);
napi_handle_scope
scope
=
nullptr
;
napi_open_handle_scope
(
param
->
env
,
&
scope
);
napi_value
onRemoteRequest
=
nullptr
;
napi_value
onRemoteRequest
=
nullptr
;
napi_value
thisVar
=
nullptr
;
napi_value
thisVar
=
nullptr
;
napi_get_reference_value
(
param
->
env
,
param
->
thisVarRef
,
&
thisVar
);
napi_get_reference_value
(
param
->
env
,
param
->
thisVarRef
,
&
thisVar
);
...
@@ -346,6 +365,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -346,6 +365,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
napi_get_named_property
(
param
->
env
,
thisVar
,
"onRemoteMessageRequest"
,
&
onRemoteRequest
);
napi_get_named_property
(
param
->
env
,
thisVar
,
"onRemoteMessageRequest"
,
&
onRemoteRequest
);
...
@@ -355,6 +375,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -355,6 +375,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
napi_valuetype
type
=
napi_undefined
;
napi_valuetype
type
=
napi_undefined
;
...
@@ -368,6 +389,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -368,6 +389,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
isOnRemoteMessageRequest
=
false
;
isOnRemoteMessageRequest
=
false
;
...
@@ -383,6 +405,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -383,6 +405,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
napi_value
jsOptionConstructor
=
nullptr
;
napi_value
jsOptionConstructor
=
nullptr
;
...
@@ -393,6 +416,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -393,6 +416,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
napi_value
jsOption
;
napi_value
jsOption
;
...
@@ -409,6 +433,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -409,6 +433,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
napi_value
jsParcelConstructor
=
nullptr
;
napi_value
jsParcelConstructor
=
nullptr
;
...
@@ -423,6 +448,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -423,6 +448,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
napi_value
jsData
;
napi_value
jsData
;
...
@@ -436,6 +462,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -436,6 +462,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
size_t
argc3
=
1
;
size_t
argc3
=
1
;
...
@@ -447,6 +474,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -447,6 +474,7 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
napi_value
jsReply
;
napi_value
jsReply
;
...
@@ -460,6 +488,8 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -460,6 +488,8 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
RemoveParcelWrap
(
param
,
isOnRemoteMessageRequest
,
jsData
);
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
size_t
argc4
=
1
;
size_t
argc4
=
1
;
...
@@ -471,6 +501,8 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -471,6 +501,8 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
RemoveParcelWrap
(
param
,
isOnRemoteMessageRequest
,
jsData
);
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
}
NAPI_CallingInfo
oldCallingInfo
;
NAPI_CallingInfo
oldCallingInfo
;
...
@@ -556,12 +588,18 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
...
@@ -556,12 +588,18 @@ int NAPIRemoteObject::OnJsRemoteRequest(CallbackParam *jsParam)
param
->
result
=
ERR_UNKNOWN_TRANSACTION
;
param
->
result
=
ERR_UNKNOWN_TRANSACTION
;
break
;
break
;
}
}
RemoveParcelWrap
(
param
,
isOnRemoteMessageRequest
,
jsData
);
RemoveParcelWrap
(
param
,
isOnRemoteMessageRequest
,
jsReply
);
napi_close_handle_scope
(
param
->
env
,
scope
);
return
;
return
;
}
while
(
0
);
}
while
(
0
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
param
->
lockInfo
->
mutex
);
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
ready
=
true
;
param
->
lockInfo
->
condition
.
notify_all
();
param
->
lockInfo
->
condition
.
notify_all
();
RemoveParcelWrap
(
param
,
isOnRemoteMessageRequest
,
jsData
);
RemoveParcelWrap
(
param
,
isOnRemoteMessageRequest
,
jsReply
);
napi_close_handle_scope
(
param
->
env
,
scope
);
});
});
std
::
unique_lock
<
std
::
mutex
>
lock
(
jsParam
->
lockInfo
->
mutex
);
std
::
unique_lock
<
std
::
mutex
>
lock
(
jsParam
->
lockInfo
->
mutex
);
jsParam
->
lockInfo
->
condition
.
wait
(
lock
,
[
&
jsParam
]
{
return
jsParam
->
lockInfo
->
ready
;
});
jsParam
->
lockInfo
->
condition
.
wait
(
lock
,
[
&
jsParam
]
{
return
jsParam
->
lockInfo
->
ready
;
});
...
@@ -802,6 +840,8 @@ void StubExecuteSendRequest(napi_env env, SendRequestParam *param)
...
@@ -802,6 +840,8 @@ void StubExecuteSendRequest(napi_env env, SendRequestParam *param)
afterWorkCb
=
[](
uv_work_t
*
work
,
int
status
)
{
afterWorkCb
=
[](
uv_work_t
*
work
,
int
status
)
{
ZLOGI
(
LOG_LABEL
,
"callback started"
);
ZLOGI
(
LOG_LABEL
,
"callback started"
);
SendRequestParam
*
param
=
reinterpret_cast
<
SendRequestParam
*>
(
work
->
data
);
SendRequestParam
*
param
=
reinterpret_cast
<
SendRequestParam
*>
(
work
->
data
);
napi_handle_scope
scope
=
nullptr
;
napi_open_handle_scope
(
param
->
env
,
&
scope
);
napi_value
result
=
MakeSendRequestResult
(
param
);
napi_value
result
=
MakeSendRequestResult
(
param
);
napi_value
callback
=
nullptr
;
napi_value
callback
=
nullptr
;
napi_get_reference_value
(
param
->
env
,
param
->
callback
,
&
callback
);
napi_get_reference_value
(
param
->
env
,
param
->
callback
,
&
callback
);
...
@@ -811,6 +851,7 @@ void StubExecuteSendRequest(napi_env env, SendRequestParam *param)
...
@@ -811,6 +851,7 @@ void StubExecuteSendRequest(napi_env env, SendRequestParam *param)
napi_delete_reference
(
param
->
env
,
param
->
jsDataRef
);
napi_delete_reference
(
param
->
env
,
param
->
jsDataRef
);
napi_delete_reference
(
param
->
env
,
param
->
jsReplyRef
);
napi_delete_reference
(
param
->
env
,
param
->
jsReplyRef
);
napi_delete_reference
(
param
->
env
,
param
->
callback
);
napi_delete_reference
(
param
->
env
,
param
->
callback
);
napi_close_handle_scope
(
param
->
env
,
scope
);
delete
param
;
delete
param
;
delete
work
;
delete
work
;
};
};
...
@@ -818,6 +859,8 @@ void StubExecuteSendRequest(napi_env env, SendRequestParam *param)
...
@@ -818,6 +859,8 @@ void StubExecuteSendRequest(napi_env env, SendRequestParam *param)
afterWorkCb
=
[](
uv_work_t
*
work
,
int
status
)
{
afterWorkCb
=
[](
uv_work_t
*
work
,
int
status
)
{
ZLOGI
(
LOG_LABEL
,
"promise fullfilled"
);
ZLOGI
(
LOG_LABEL
,
"promise fullfilled"
);
SendRequestParam
*
param
=
reinterpret_cast
<
SendRequestParam
*>
(
work
->
data
);
SendRequestParam
*
param
=
reinterpret_cast
<
SendRequestParam
*>
(
work
->
data
);
napi_handle_scope
scope
=
nullptr
;
napi_open_handle_scope
(
param
->
env
,
&
scope
);
napi_value
result
=
MakeSendRequestResult
(
param
);
napi_value
result
=
MakeSendRequestResult
(
param
);
if
(
param
->
errCode
==
0
)
{
if
(
param
->
errCode
==
0
)
{
napi_resolve_deferred
(
param
->
env
,
param
->
deferred
,
result
);
napi_resolve_deferred
(
param
->
env
,
param
->
deferred
,
result
);
...
@@ -827,6 +870,7 @@ void StubExecuteSendRequest(napi_env env, SendRequestParam *param)
...
@@ -827,6 +870,7 @@ void StubExecuteSendRequest(napi_env env, SendRequestParam *param)
napi_delete_reference
(
param
->
env
,
param
->
jsCodeRef
);
napi_delete_reference
(
param
->
env
,
param
->
jsCodeRef
);
napi_delete_reference
(
param
->
env
,
param
->
jsDataRef
);
napi_delete_reference
(
param
->
env
,
param
->
jsDataRef
);
napi_delete_reference
(
param
->
env
,
param
->
jsReplyRef
);
napi_delete_reference
(
param
->
env
,
param
->
jsReplyRef
);
napi_close_handle_scope
(
param
->
env
,
scope
);
delete
param
;
delete
param
;
delete
work
;
delete
work
;
};
};
...
...
ipc/native/src/napi_common/source/napi_remote_proxy_holder.cpp
浏览文件 @
746bb76f
...
@@ -56,6 +56,8 @@ void NAPIDeathRecipient::OnRemoteDied(const wptr<IRemoteObject> &object)
...
@@ -56,6 +56,8 @@ void NAPIDeathRecipient::OnRemoteDied(const wptr<IRemoteObject> &object)
uv_queue_work
(
loop
,
work
,
[](
uv_work_t
*
work
)
{},
[](
uv_work_t
*
work
,
int
status
)
{
uv_queue_work
(
loop
,
work
,
[](
uv_work_t
*
work
)
{},
[](
uv_work_t
*
work
,
int
status
)
{
ZLOGI
(
LOG_LABEL
,
"start to call onRmeoteDied"
);
ZLOGI
(
LOG_LABEL
,
"start to call onRmeoteDied"
);
OnRemoteDiedParam
*
param
=
reinterpret_cast
<
OnRemoteDiedParam
*>
(
work
->
data
);
OnRemoteDiedParam
*
param
=
reinterpret_cast
<
OnRemoteDiedParam
*>
(
work
->
data
);
napi_handle_scope
scope
=
nullptr
;
napi_open_handle_scope
(
param
->
env
,
&
scope
);
napi_value
jsDeathRecipient
=
nullptr
;
napi_value
jsDeathRecipient
=
nullptr
;
napi_get_reference_value
(
param
->
env
,
param
->
deathRecipientRef
,
&
jsDeathRecipient
);
napi_get_reference_value
(
param
->
env
,
param
->
deathRecipientRef
,
&
jsDeathRecipient
);
NAPI_ASSERT_RETURN_VOID
(
param
->
env
,
jsDeathRecipient
!=
nullptr
,
"failed to get js death recipient"
);
NAPI_ASSERT_RETURN_VOID
(
param
->
env
,
jsDeathRecipient
!=
nullptr
,
"failed to get js death recipient"
);
...
@@ -69,6 +71,7 @@ void NAPIDeathRecipient::OnRemoteDied(const wptr<IRemoteObject> &object)
...
@@ -69,6 +71,7 @@ void NAPIDeathRecipient::OnRemoteDied(const wptr<IRemoteObject> &object)
}
}
napi_status
napiStatus
=
napi_delete_reference
(
param
->
env
,
param
->
deathRecipientRef
);
napi_status
napiStatus
=
napi_delete_reference
(
param
->
env
,
param
->
deathRecipientRef
);
napi_close_handle_scope
(
param
->
env
,
scope
);
NAPI_ASSERT_RETURN_VOID
(
param
->
env
,
napiStatus
==
napi_ok
,
"failed to delete ref to js death recipient"
);
NAPI_ASSERT_RETURN_VOID
(
param
->
env
,
napiStatus
==
napi_ok
,
"failed to delete ref to js death recipient"
);
delete
param
;
delete
param
;
delete
work
;
delete
work
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录