Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
communication_ipc
提交
7c1b0ee9
C
communication_ipc
项目概览
OpenHarmony
/
communication_ipc
9 个月 前同步成功
通知
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,体验更适合开发者的 AI 搜索 >>
未验证
提交
7c1b0ee9
编写于
8月 16, 2023
作者:
O
openharmony_ci
提交者:
Gitee
8月 16, 2023
浏览文件
操作
浏览文件
下载
差异文件
!764 fix weak ref mem leak
Merge pull request !764 from 马根堂/master
上级
02250df7
c00831b4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
45 addition
and
1 deletion
+45
-1
ipc/native/src/napi_common/source/napi_remote_object_holder.cpp
...tive/src/napi_common/source/napi_remote_object_holder.cpp
+45
-1
未找到文件。
ipc/native/src/napi_common/source/napi_remote_object_holder.cpp
浏览文件 @
7c1b0ee9
...
...
@@ -39,7 +39,7 @@ NAPIRemoteObjectHolder::NAPIRemoteObjectHolder(napi_env env, const std::u16strin
localInterfaceRef_
(
nullptr
),
attachCount_
(
1
),
jsObjectRef_
(
nullptr
)
{
jsThreadId_
=
std
::
this_thread
::
get_id
();
// create weak ref,
do not need to delete
,
// create weak ref,
need call napi_delete_reference to release memory
,
// increase ref count when the JS object will transfer to another thread or process.
napi_create_reference
(
env
,
thisVar
,
0
,
&
jsObjectRef_
);
...
...
@@ -58,6 +58,47 @@ NAPIRemoteObjectHolder::~NAPIRemoteObjectHolder()
ZLOGE
(
LOG_LABEL
,
"remove cleanup hook failed"
);
}
}
if
(
localInterfaceRef_
!=
nullptr
)
{
napi_status
napiStatus
=
napi_delete_reference
(
env_
,
localInterfaceRef_
);
if
(
napiStatus
!=
napi_ok
)
{
ZLOGE
(
LOG_LABEL
,
"failed to delete ref"
);
}
}
if
(
jsObjectRef_
!=
nullptr
&&
env_
!=
nullptr
)
{
if
(
jsThreadId_
==
std
::
this_thread
::
get_id
())
{
napi_status
napiStatus
=
napi_delete_reference
(
env_
,
jsObjectRef_
);
if
(
napiStatus
!=
napi_ok
)
{
ZLOGE
(
LOG_LABEL
,
"failed to delete ref"
);
}
}
else
{
uv_loop_s
*
loop
=
nullptr
;
napi_get_uv_event_loop
(
env_
,
&
loop
);
uv_work_t
*
work
=
new
(
std
::
nothrow
)
uv_work_t
;
if
(
work
==
nullptr
)
{
ZLOGE
(
LOG_LABEL
,
"failed to new work"
);
return
;
}
OperateJsRefParam
*
param
=
new
OperateJsRefParam
{
.
env
=
env_
,
.
thisVarRef
=
jsObjectRef_
};
work
->
data
=
reinterpret_cast
<
void
*>
(
param
);
uv_queue_work
(
loop
,
work
,
[](
uv_work_t
*
work
)
{},
[](
uv_work_t
*
work
,
int
status
)
{
OperateJsRefParam
*
param
=
reinterpret_cast
<
OperateJsRefParam
*>
(
work
->
data
);
napi_handle_scope
scope
=
nullptr
;
napi_open_handle_scope
(
param
->
env
,
&
scope
);
napi_status
napiStatus
=
napi_delete_reference
(
param
->
env
,
param
->
thisVarRef
);
if
(
napiStatus
!=
napi_ok
)
{
ZLOGE
(
LOG_LABEL
,
"failed to delete ref on uv work"
);
}
napi_close_handle_scope
(
param
->
env
,
scope
);
delete
param
;
delete
work
;
});
}
}
}
sptr
<
IRemoteObject
>
NAPIRemoteObjectHolder
::
Get
()
...
...
@@ -116,6 +157,9 @@ void NAPIRemoteObjectHolder::attachLocalInterface(napi_value localInterface, std
ZLOGE
(
LOG_LABEL
,
"Js env has been destructed"
);
return
;
}
if
(
localInterfaceRef_
!=
nullptr
)
{
napi_delete_reference
(
env_
,
localInterfaceRef_
);
}
napi_create_reference
(
env_
,
localInterface
,
0
,
&
localInterfaceRef_
);
descriptor_
=
Str8ToStr16
(
descriptor
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录