Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
e3419f9c
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e3419f9c
编写于
8月 22, 2013
作者:
B
Brian Anderson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rt: Memory regions are never synchronized now
上级
0a1baef4
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
10 addition
and
31 deletion
+10
-31
src/libstd/rt/local_heap.rs
src/libstd/rt/local_heap.rs
+2
-5
src/rt/memory_region.cpp
src/rt/memory_region.cpp
+5
-19
src/rt/memory_region.h
src/rt/memory_region.h
+1
-3
src/rt/rust_builtin.cpp
src/rt/rust_builtin.cpp
+2
-4
未找到文件。
src/libstd/rt/local_heap.rs
浏览文件 @
e3419f9c
...
...
@@ -40,12 +40,10 @@ impl LocalHeap {
#[fixed_stack_segment]
#[inline(never)]
pub
fn
new
()
->
LocalHeap
{
unsafe
{
// Don't need synchronization for the single-threaded local heap
let
synchronized
=
false
as
uintptr_t
;
// XXX: These usually come from the environment
let
detailed_leaks
=
false
as
uintptr_t
;
let
poison_on_free
=
false
as
uintptr_t
;
let
region
=
rust_new_memory_region
(
synchronized
,
detailed_leaks
,
poison_on_free
);
let
region
=
rust_new_memory_region
(
detailed_leaks
,
poison_on_free
);
assert
!
(
region
.is_not_null
());
let
boxed
=
rust_new_boxed_region
(
region
,
poison_on_free
);
assert
!
(
boxed
.is_not_null
());
...
...
@@ -109,8 +107,7 @@ pub fn live_allocs() -> *raw::Box<()> {
extern
{
#[fast_ffi]
fn
rust_new_memory_region
(
synchronized
:
uintptr_t
,
detailed_leaks
:
uintptr_t
,
fn
rust_new_memory_region
(
detailed_leaks
:
uintptr_t
,
poison_on_free
:
uintptr_t
)
->
*
MemoryRegion
;
#[fast_ffi]
fn
rust_delete_memory_region
(
region
:
*
MemoryRegion
);
...
...
src/rt/memory_region.cpp
浏览文件 @
e3419f9c
...
...
@@ -42,30 +42,25 @@ inline void memory_region::maybe_print_backtrace(const alloc_header *header) con
# endif
}
memory_region
::
memory_region
(
bool
synchronized
,
bool
detailed_leaks
,
memory_region
::
memory_region
(
bool
detailed_leaks
,
bool
poison_on_free
)
:
_parent
(
NULL
),
_live_allocations
(
0
),
_detailed_leaks
(
detailed_leaks
),
_poison_on_free
(
poison_on_free
),
_synchronized
(
synchronized
)
{
_poison_on_free
(
poison_on_free
)
{
}
memory_region
::
memory_region
(
memory_region
*
parent
)
:
_parent
(
parent
),
_live_allocations
(
0
),
_detailed_leaks
(
parent
->
_detailed_leaks
),
_poison_on_free
(
parent
->
_poison_on_free
),
_synchronized
(
parent
->
_synchronized
)
{
_poison_on_free
(
parent
->
_poison_on_free
)
{
}
void
memory_region
::
add_alloc
()
{
//_live_allocations++;
sync
::
increment
(
_live_allocations
);
_live_allocations
++
;
}
void
memory_region
::
dec_alloc
()
{
//_live_allocations--;
sync
::
decrement
(
_live_allocations
);
_live_allocations
--
;
}
void
memory_region
::
free
(
void
*
mem
)
{
...
...
@@ -112,7 +107,6 @@ memory_region::realloc(void *mem, size_t orig_size) {
# endif
# if RUSTRT_TRACK_ALLOCATIONS >= 2
if
(
_synchronized
)
{
_lock
.
lock
();
}
if
(
_allocation_list
[
newMem
->
index
]
!=
alloc
)
{
printf
(
"at index %d, found %p, expected %p
\n
"
,
alloc
->
index
,
_allocation_list
[
alloc
->
index
],
alloc
);
...
...
@@ -125,7 +119,6 @@ memory_region::realloc(void *mem, size_t orig_size) {
// printf("realloc: stored %p at index %d, replacing %p\n",
// newMem, index, mem);
}
if
(
_synchronized
)
{
_lock
.
unlock
();
}
# endif
return
get_data
(
newMem
);
...
...
@@ -160,9 +153,7 @@ memory_region::malloc(size_t size, const char *tag) {
}
memory_region
::~
memory_region
()
{
if
(
_synchronized
)
{
_lock
.
lock
();
}
if
(
_live_allocations
==
0
&&
!
_detailed_leaks
)
{
if
(
_synchronized
)
{
_lock
.
unlock
();
}
return
;
}
char
msg
[
128
];
...
...
@@ -193,7 +184,6 @@ memory_region::~memory_region() {
fprintf
(
stderr
,
"%s
\n
"
,
msg
);
assert
(
false
);
}
if
(
_synchronized
)
{
_lock
.
unlock
();
}
}
void
...
...
@@ -204,7 +194,6 @@ memory_region::release_alloc(void *mem) {
# endif
# if RUSTRT_TRACK_ALLOCATIONS >= 2
if
(
_synchronized
)
{
_lock
.
lock
();
}
if
(((
size_t
)
alloc
->
index
)
>=
_allocation_list
.
size
())
{
printf
(
"free: ptr 0x%"
PRIxPTR
" (%s) index %d is beyond allocation_list of size %zu
\n
"
,
(
uintptr_t
)
get_data
(
alloc
),
alloc
->
tag
,
alloc
->
index
,
_allocation_list
.
size
());
...
...
@@ -222,7 +211,6 @@ memory_region::release_alloc(void *mem) {
_allocation_list
[
alloc
->
index
]
=
NULL
;
alloc
->
index
=
-
1
;
}
if
(
_synchronized
)
{
_lock
.
unlock
();
}
# endif
dec_alloc
();
...
...
@@ -236,9 +224,7 @@ memory_region::claim_alloc(void *mem) {
# endif
# if RUSTRT_TRACK_ALLOCATIONS >= 2
if
(
_synchronized
)
{
_lock
.
lock
();
}
alloc
->
index
=
_allocation_list
.
append
(
alloc
);
if
(
_synchronized
)
{
_lock
.
unlock
();
}
# endif
# if RUSTRT_TRACK_ALLOCATIONS >= 3
...
...
src/rt/memory_region.h
浏览文件 @
e3419f9c
...
...
@@ -59,7 +59,6 @@ private:
array_list
<
alloc_header
*>
_allocation_list
;
const
bool
_detailed_leaks
;
const
bool
_poison_on_free
;
const
bool
_synchronized
;
lock_and_signal
_lock
;
void
add_alloc
();
...
...
@@ -77,8 +76,7 @@ private:
memory_region
&
operator
=
(
const
memory_region
&
rhs
);
public:
memory_region
(
bool
synchronized
,
bool
detailed_leaks
,
bool
poison_on_free
);
memory_region
(
bool
detailed_leaks
,
bool
poison_on_free
);
memory_region
(
memory_region
*
parent
);
void
*
malloc
(
size_t
size
,
const
char
*
tag
);
void
*
realloc
(
void
*
mem
,
size_t
size
);
...
...
src/rt/rust_builtin.cpp
浏览文件 @
e3419f9c
...
...
@@ -528,11 +528,9 @@ rust_initialize_rt_tls_key() {
}
extern
"C"
CDECL
memory_region
*
rust_new_memory_region
(
uintptr_t
synchronized
,
uintptr_t
detailed_leaks
,
rust_new_memory_region
(
uintptr_t
detailed_leaks
,
uintptr_t
poison_on_free
)
{
return
new
memory_region
((
bool
)
synchronized
,
(
bool
)
detailed_leaks
,
return
new
memory_region
((
bool
)
detailed_leaks
,
(
bool
)
poison_on_free
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录