Skip to content

Commit 2fe118b

Browse files
committed
rt: Don't make memory_region depend on rust_env
I am going to use memory_region and boxed_region as the local heap in the new scheduler, for now at least, and I don't have a rust_env available.
1 parent f9069ba commit 2fe118b

File tree

6 files changed

+18
-14
lines changed

6 files changed

+18
-14
lines changed

src/rt/boxed_region.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ void boxed_region::free(rust_opaque_box *box) {
8282
if (box->next) box->next->prev = box->prev;
8383
if (live_allocs == box) live_allocs = box->next;
8484

85-
if (env->poison_on_free) {
85+
if (poison_on_free) {
8686
memset(box_body(box), 0xab, box->td->size);
8787
}
8888

src/rt/boxed_region.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ struct rust_env;
2424
* a type descr which describes the payload (what follows the header). */
2525
class boxed_region {
2626
private:
27-
rust_env *env;
27+
bool poison_on_free;
2828
memory_region *backing_region;
2929
rust_opaque_box *live_allocs;
3030

@@ -41,8 +41,8 @@ class boxed_region {
4141
boxed_region& operator=(const boxed_region& rhs);
4242

4343
public:
44-
boxed_region(rust_env *e, memory_region *br)
45-
: env(e)
44+
boxed_region(memory_region *br, bool poison_on_free)
45+
: poison_on_free(poison_on_free)
4646
, backing_region(br)
4747
, live_allocs(NULL)
4848
{}

src/rt/memory_region.cpp

+9-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#include "sync/sync.h"
1313
#include "memory_region.h"
14-
#include "rust_env.h"
1514

1615
#if RUSTRT_TRACK_ALLOCATIONS >= 3
1716
#include <execinfo.h>
@@ -35,15 +34,19 @@ void *memory_region::get_data(alloc_header *ptr) {
3534
return (void*)((char *)ptr + HEADER_SIZE);
3635
}
3736

38-
memory_region::memory_region(rust_env *env, bool synchronized) :
39-
_env(env), _parent(NULL), _live_allocations(0),
40-
_detailed_leaks(env->detailed_leaks),
37+
memory_region::memory_region(bool synchronized,
38+
bool detailed_leaks,
39+
bool poison_on_free) :
40+
_parent(NULL), _live_allocations(0),
41+
_detailed_leaks(detailed_leaks),
42+
_poison_on_free(poison_on_free),
4143
_synchronized(synchronized) {
4244
}
4345

4446
memory_region::memory_region(memory_region *parent) :
45-
_env(parent->_env), _parent(parent), _live_allocations(0),
47+
_parent(parent), _live_allocations(0),
4648
_detailed_leaks(parent->_detailed_leaks),
49+
_poison_on_free(parent->_poison_on_free),
4750
_synchronized(parent->_synchronized) {
4851
}
4952

@@ -241,7 +244,7 @@ memory_region::claim_alloc(void *mem) {
241244
void
242245
memory_region::maybe_poison(void *mem) {
243246

244-
if (!_env->poison_on_free)
247+
if (!_poison_on_free)
245248
return;
246249

247250
# if RUSTRT_TRACK_ALLOCATIONS >= 1

src/rt/memory_region.h

+3-2
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ class memory_region {
5454
inline alloc_header *get_header(void *mem);
5555
inline void *get_data(alloc_header *);
5656

57-
rust_env *_env;
5857
memory_region *_parent;
5958
int _live_allocations;
6059
array_list<alloc_header *> _allocation_list;
6160
const bool _detailed_leaks;
61+
const bool _poison_on_free;
6262
const bool _synchronized;
6363
lock_and_signal _lock;
6464

@@ -75,7 +75,8 @@ class memory_region {
7575
memory_region& operator=(const memory_region& rhs);
7676

7777
public:
78-
memory_region(rust_env *env, bool synchronized);
78+
memory_region(bool synchronized,
79+
bool detailed_leaks, bool poison_on_free);
7980
memory_region(memory_region *parent);
8081
void *malloc(size_t size, const char *tag);
8182
void *realloc(void *mem, size_t size);

src/rt/rust_sched_loop.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ rust_sched_loop::rust_sched_loop(rust_scheduler *sched, int id, bool killed) :
3636
sched(sched),
3737
log_lvl(log_debug),
3838
min_stack_size(kernel->env->min_stack_size),
39-
local_region(kernel->env, false),
39+
local_region(false, kernel->env->detailed_leaks, kernel->env->poison_on_free),
4040
// FIXME #2891: calculate a per-scheduler name.
4141
name("main")
4242
{

src/rt/rust_task.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ rust_task::rust_task(rust_sched_loop *sched_loop, rust_task_state state,
3636
kernel(sched_loop->kernel),
3737
name(name),
3838
list_index(-1),
39-
boxed(sched_loop->kernel->env, &local_region),
39+
boxed(&local_region, sched_loop->kernel->env->poison_on_free),
4040
local_region(&sched_loop->local_region),
4141
unwinding(false),
4242
total_stack_sz(0),

0 commit comments

Comments
 (0)