Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
0e9d895b
提交
0e9d895b
4月 10, 2012
创建
作者:
David Benjamin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move cleanup to radix_node destructor
When large chunks of tree get RCU-freed, we'll detach them and only gc_delayed() the root.
上级
eae77331
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
16 行增加
和
15 行删除
+16
-15
radix.hh
include/radix.hh
+3
-1
radix.cc
kernel/radix.cc
+13
-14
没有找到文件。
include/radix.hh
浏览文件 @
0e9d895b
...
...
@@ -114,6 +114,8 @@ public:
assert
(
is_node
());
return
reinterpret_cast
<
radix_node
*>
(
ptr
());
}
void
release
();
private
:
uptr
value_
;
};
...
...
@@ -151,8 +153,8 @@ struct radix_node : public rcu_freed {
radix_ptr
child
[
1
<<
bits_per_level
];
radix_node
()
:
rcu_freed
(
"radix_node"
)
{
}
~
radix_node
();
void
delete_tree
(
u32
level
);
virtual
void
do_gc
()
{
delete
this
;
}
NEW_DELETE_OPS
(
radix_node
)
...
...
kernel/radix.cc
浏览文件 @
0e9d895b
...
...
@@ -55,27 +55,26 @@ descend(u64 key, radix_ptr *n, u32 level, CB cb, bool create)
}
void
radix_node
::
delete_tree
(
u32
level
)
radix_entry
::
release
()
{
if
(
is_null
())
return
;
if
(
is_node
())
{
node
()
->
do_gc
();
}
else
{
elem
()
->
decref
();
}
}
radix_node
::~
radix_node
()
{
// FIXME: Put this in the destructor and stuff. Maybe even make the
// dispatch a method of radix_entry. Could even make radix_entry a
// unique_ptr-type of thing, but that's probably a bit much.
for
(
int
i
=
0
;
i
<
(
1
<<
bits_per_level
);
i
++
)
{
radix_entry
entry
=
child
[
i
].
load
();
if
(
!
entry
.
is_null
())
{
if
(
entry
.
is_node
())
entry
.
node
()
->
delete_tree
(
level
-
1
);
else
entry
.
elem
()
->
decref
();
}
child
[
i
].
load
().
release
();
}
do_gc
();
}
radix
::~
radix
()
{
// FIXME: See above
root_
.
load
().
node
()
->
delete_tree
(
radix_levels
);
root_
.
load
().
release
();
}
radix_elem
*
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论