Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
communication_ipc
提交
404597c0
C
communication_ipc
项目概览
OpenHarmony
/
communication_ipc
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
未验证
提交
404597c0
编写于
6月 02, 2023
作者:
马
马根堂
提交者:
Gitee
6月 02, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
mem leak
Signed-off-by:
N
马根堂
<
magentang4@huawei.com
>
上级
74c87f7c
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
19 addition
and
15 deletion
+19
-15
ipc/native/src/napi_common/include/napi_remote_object_holder.h
...ative/src/napi_common/include/napi_remote_object_holder.h
+2
-1
ipc/native/src/napi_common/source/napi_remote_object.cpp
ipc/native/src/napi_common/source/napi_remote_object.cpp
+4
-10
ipc/native/src/napi_common/source/napi_remote_object_holder.cpp
...tive/src/napi_common/source/napi_remote_object_holder.cpp
+13
-4
未找到文件。
ipc/native/src/napi_common/include/napi_remote_object_holder.h
浏览文件 @
404597c0
...
@@ -64,7 +64,8 @@ private:
...
@@ -64,7 +64,8 @@ private:
std
::
mutex
mutex_
;
std
::
mutex
mutex_
;
napi_env
env_
=
nullptr
;
napi_env
env_
=
nullptr
;
std
::
u16string
descriptor_
;
std
::
u16string
descriptor_
;
wptr
<
NAPIRemoteObject
>
cachedObject_
;
sptr
<
NAPIRemoteObject
>
sptrCachedObject_
;
wptr
<
NAPIRemoteObject
>
wptrCachedObject_
;
napi_ref
localInterfaceRef_
;
napi_ref
localInterfaceRef_
;
//int32_t attachCount_;
//int32_t attachCount_;
};
};
...
...
ipc/native/src/napi_common/source/napi_remote_object.cpp
浏览文件 @
404597c0
...
@@ -192,13 +192,6 @@ napi_ref NAPIRemoteObject::GetJsObjectRef() const
...
@@ -192,13 +192,6 @@ napi_ref NAPIRemoteObject::GetJsObjectRef() const
{
{
return
thisVarRef_
;
return
thisVarRef_
;
}
}
/*
napi_value NAPIRemoteObject::GetJsObject() const
{
napi_value ret = nullptr;
napi_get_reference_value(env_, thisVarRef_, &ret);
return ret;
}*/
void
NAPI_RemoteObject_getCallingInfo
(
CallingInfo
&
newCallingInfoParam
)
void
NAPI_RemoteObject_getCallingInfo
(
CallingInfo
&
newCallingInfoParam
)
{
{
...
@@ -594,11 +587,11 @@ napi_value NAPI_ohos_rpc_CreateJsRemoteObject(napi_env env, const sptr<IRemoteOb
...
@@ -594,11 +587,11 @@ napi_value NAPI_ohos_rpc_CreateJsRemoteObject(napi_env env, const sptr<IRemoteOb
if
(
target
->
CheckObjectLegality
())
{
if
(
target
->
CheckObjectLegality
())
{
IPCObjectStub
*
tmp
=
static_cast
<
IPCObjectStub
*>
(
target
.
GetRefPtr
());
IPCObjectStub
*
tmp
=
static_cast
<
IPCObjectStub
*>
(
target
.
GetRefPtr
());
ZLOGI
(
LOG_LABEL
,
"[mgttest]object type:%{public}d"
,
tmp
->
GetObjectType
());
uint32_t
objectType
=
tmp
->
GetObjectType
();
if
(
tmp
->
GetObjectType
()
==
IPCObjectStub
::
OBJECT_TYPE_JAVASCRIPT
)
{
ZLOGI
(
LOG_LABEL
,
"[mgttest]object type:%{public}d"
,
objectType
);
if
(
objectType
==
IPCObjectStub
::
OBJECT_TYPE_JAVASCRIPT
||
objectType
==
IPCObjectStub
::
OBJECT_TYPE_NATIVE
)
{
//ZLOGI(LOG_LABEL, "napi create js remote object");
//ZLOGI(LOG_LABEL, "napi create js remote object");
sptr
<
NAPIRemoteObject
>
object
=
static_cast
<
NAPIRemoteObject
*>
(
target
.
GetRefPtr
());
sptr
<
NAPIRemoteObject
>
object
=
static_cast
<
NAPIRemoteObject
*>
(
target
.
GetRefPtr
());
//return object->GetJsObject();
// retrieve js remote object constructor
// retrieve js remote object constructor
napi_value
global
=
nullptr
;
napi_value
global
=
nullptr
;
napi_status
status
=
napi_get_global
(
env
,
&
global
);
napi_status
status
=
napi_get_global
(
env
,
&
global
);
...
@@ -622,6 +615,7 @@ napi_value NAPI_ohos_rpc_CreateJsRemoteObject(napi_env env, const sptr<IRemoteOb
...
@@ -622,6 +615,7 @@ napi_value NAPI_ohos_rpc_CreateJsRemoteObject(napi_env env, const sptr<IRemoteOb
NAPIRemoteObjectHolder
*
holder
=
nullptr
;
NAPIRemoteObjectHolder
*
holder
=
nullptr
;
napi_unwrap
(
env
,
jsRemoteObject
,
(
void
**
)
&
holder
);
napi_unwrap
(
env
,
jsRemoteObject
,
(
void
**
)
&
holder
);
NAPI_ASSERT
(
env
,
holder
!=
nullptr
,
"failed to get napi remote object holder"
);
NAPI_ASSERT
(
env
,
holder
!=
nullptr
,
"failed to get napi remote object holder"
);
ZLOGI
(
LOG_LABEL
,
"[mgttest]ipc object, save as wptr"
);
holder
->
Set
(
object
);
holder
->
Set
(
object
);
return
jsRemoteObject
;
return
jsRemoteObject
;
}
}
...
...
ipc/native/src/napi_common/source/napi_remote_object_holder.cpp
浏览文件 @
404597c0
...
@@ -26,7 +26,8 @@ NAPIRemoteObjectHolder::NAPIRemoteObjectHolder(napi_env env, const std::u16strin
...
@@ -26,7 +26,8 @@ NAPIRemoteObjectHolder::NAPIRemoteObjectHolder(napi_env env, const std::u16strin
NAPIRemoteObjectHolder
::~
NAPIRemoteObjectHolder
()
NAPIRemoteObjectHolder
::~
NAPIRemoteObjectHolder
()
{
{
// free the reference of object.
// free the reference of object.
cachedObject_
=
nullptr
;
sptrCachedObject_
=
nullptr
;
wptrCachedObject_
=
nullptr
;
if
(
localInterfaceRef_
!=
nullptr
)
{
if
(
localInterfaceRef_
!=
nullptr
)
{
napi_delete_reference
(
env_
,
localInterfaceRef_
);
napi_delete_reference
(
env_
,
localInterfaceRef_
);
}
}
...
@@ -37,10 +38,13 @@ sptr<NAPIRemoteObject> NAPIRemoteObjectHolder::Get(napi_value jsRemoteObject)
...
@@ -37,10 +38,13 @@ sptr<NAPIRemoteObject> NAPIRemoteObjectHolder::Get(napi_value jsRemoteObject)
std
::
lock_guard
<
std
::
mutex
>
lockGuard
(
mutex_
);
std
::
lock_guard
<
std
::
mutex
>
lockGuard
(
mutex_
);
// grab an strong reference to the object,
// grab an strong reference to the object,
// so it will not be freed util this reference released.
// so it will not be freed util this reference released.
sptr
<
NAPIRemoteObject
>
tmp
=
cachedObject_
.
promote
();
if
(
sptrCachedObject_
!=
nullptr
)
{
return
sptrCachedObject_
;
}
sptr
<
NAPIRemoteObject
>
tmp
=
wptrCachedObject_
.
promote
();
if
(
tmp
==
nullptr
)
{
if
(
tmp
==
nullptr
)
{
tmp
=
new
NAPIRemoteObject
(
env_
,
jsRemoteObject
,
descriptor_
);
tmp
=
new
NAPIRemoteObject
(
env_
,
jsRemoteObject
,
descriptor_
);
c
achedObject_
=
tmp
;
wptrC
achedObject_
=
tmp
;
}
}
return
tmp
;
return
tmp
;
}
}
...
@@ -48,7 +52,12 @@ sptr<NAPIRemoteObject> NAPIRemoteObjectHolder::Get(napi_value jsRemoteObject)
...
@@ -48,7 +52,12 @@ sptr<NAPIRemoteObject> NAPIRemoteObjectHolder::Get(napi_value jsRemoteObject)
void
NAPIRemoteObjectHolder
::
Set
(
sptr
<
NAPIRemoteObject
>
object
)
void
NAPIRemoteObjectHolder
::
Set
(
sptr
<
NAPIRemoteObject
>
object
)
{
{
std
::
lock_guard
<
std
::
mutex
>
lockGuard
(
mutex_
);
std
::
lock_guard
<
std
::
mutex
>
lockGuard
(
mutex_
);
cachedObject_
=
object
;
IPCObjectStub
*
tmp
=
static_cast
<
IPCObjectStub
*>
(
object
.
GetRefPtr
());
if
(
tmp
->
GetObjectType
()
==
IPCObjectStub
::
OBJECT_TYPE_JAVASCRIPT
)
{
wptrCachedObject_
=
object
;
}
else
{
sptrCachedObject_
=
object
;
}
}
}
void
NAPIRemoteObjectHolder
::
attachLocalInterface
(
napi_value
localInterface
,
std
::
string
&
descriptor
)
void
NAPIRemoteObjectHolder
::
attachLocalInterface
(
napi_value
localInterface
,
std
::
string
&
descriptor
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录