Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
milvus
milvus
提交
b58a7b9b
M
milvus
项目概览
milvus
/
milvus
10 个月 前同步成功
通知
260
Star
22476
Fork
2472
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
milvus
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
b58a7b9b
编写于
11月 27, 2020
作者:
X
XuPeng-SH
提交者:
GitHub
11月 27, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix memcheck leak issue (#4308)
Signed-off-by:
N
peng.xu
<
peng.xu@zilliz.com
>
上级
b01d8f8f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
21 addition
and
17 deletion
+21
-17
core/src/db/snapshot/ReferenceProxy.h
core/src/db/snapshot/ReferenceProxy.h
+4
-4
core/src/db/snapshot/ResourceHolder.h
core/src/db/snapshot/ResourceHolder.h
+9
-5
core/unittest/db/test_snapshot.cpp
core/unittest/db/test_snapshot.cpp
+8
-8
未找到文件。
core/src/db/snapshot/ReferenceProxy.h
浏览文件 @
b58a7b9b
...
...
@@ -18,10 +18,10 @@
namespace
milvus
::
engine
::
snapshot
{
using
OnNoRefCBF
=
std
::
function
<
void
(
void
)
>
;
class
ReferenceProxy
{
class
ReferenceProxy
:
public
std
::
enable_shared_from_this
<
ReferenceProxy
>
{
public:
using
Ptr
=
std
::
shared_ptr
<
ReferenceProxy
>
;
using
OnNoRefCBF
=
std
::
function
<
void
(
Ptr
)
>
;
ReferenceProxy
()
=
default
;
virtual
~
ReferenceProxy
()
=
default
;
...
...
@@ -42,7 +42,7 @@ class ReferenceProxy {
}
if
(
ref_count_
.
fetch_sub
(
1
)
==
1
)
{
for
(
auto
&
cb
:
on_no_ref_cbs_
)
{
cb
();
cb
(
this
->
shared_from_this
()
);
}
}
}
...
...
core/src/db/snapshot/ResourceHolder.h
浏览文件 @
b58a7b9b
...
...
@@ -123,7 +123,7 @@ class ResourceHolder {
return
false
;
}
id_map_
[
resource
->
GetID
()]
=
resource
;
resource
->
RegisterOnNoRefCB
(
std
::
bind
(
&
Derived
::
OnNoRefCallBack
,
this
,
resource
));
resource
->
RegisterOnNoRefCB
(
std
::
bind
(
&
Derived
::
OnNoRefCallBack
,
this
,
std
::
placeholders
::
_1
));
return
true
;
}
...
...
@@ -138,10 +138,14 @@ class ResourceHolder {
}
virtual
void
OnNoRefCallBack
(
ResourcePtr
resource
)
{
resource
->
Deactivate
();
Release
(
resource
->
GetID
());
auto
evt_ptr
=
std
::
make_shared
<
ResourceGCEvent
<
ResourceT
>>
(
resource
);
OnNoRefCallBack
(
ReferenceProxy
::
Ptr
resource
)
{
auto
res
=
std
::
dynamic_pointer_cast
<
ResourceT
>
(
resource
);
if
(
!
res
)
{
return
;
}
res
->
Deactivate
();
Release
(
res
->
GetID
());
auto
evt_ptr
=
std
::
make_shared
<
ResourceGCEvent
<
ResourceT
>>
(
res
);
EventExecutor
::
GetInstance
().
Submit
(
evt_ptr
);
}
...
...
core/unittest/db/test_snapshot.cpp
浏览文件 @
b58a7b9b
...
...
@@ -44,25 +44,25 @@ TEST_F(SnapshotTest, ResourcesTest) {
TEST_F
(
SnapshotTest
,
ReferenceProxyTest
)
{
std
::
string
status
(
"raw"
);
const
std
::
string
CALLED
=
"CALLED"
;
auto
callback
=
[
&
]()
{
auto
callback
=
[
&
](
ReferenceProxy
::
Ptr
)
{
status
=
CALLED
;
};
auto
proxy
=
ReferenceProxy
();
ASSERT_EQ
(
proxy
.
ref_count
(),
0
);
auto
proxy
=
std
::
make_shared
<
ReferenceProxy
>
();
ASSERT_EQ
(
proxy
->
ref_count
(),
0
);
int
refcnt
=
3
;
for
(
auto
i
=
0
;
i
<
refcnt
;
++
i
)
{
proxy
.
Ref
();
proxy
->
Ref
();
}
ASSERT_EQ
(
proxy
.
ref_count
(),
refcnt
);
ASSERT_EQ
(
proxy
->
ref_count
(),
refcnt
);
proxy
.
RegisterOnNoRefCB
(
callback
);
proxy
->
RegisterOnNoRefCB
(
callback
);
for
(
auto
i
=
0
;
i
<
refcnt
;
++
i
)
{
proxy
.
UnRef
();
proxy
->
UnRef
();
}
ASSERT_EQ
(
proxy
.
ref_count
(),
0
);
ASSERT_EQ
(
proxy
->
ref_count
(),
0
);
ASSERT_EQ
(
status
,
CALLED
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录