Skip to content

Commit a148190

Browse files
Eric Holkgraydon
authored andcommitted
---
yaml --- r: 3428 b: refs/heads/master c: 49a8cb3 h: refs/heads/master v: v3
1 parent 28bd6a1 commit a148190

22 files changed

+218
-227
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: f6f945fed5c8d1061d80b444331910df29afa392
2+
refs/heads/master: 49a8cb34d2b6e3f7af4a7cbe842fe48ffa0245eb

trunk/src/rt/circular_buffer.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@
44

55
#include "rust_internal.h"
66

7-
circular_buffer::circular_buffer(rust_dom *dom, size_t unit_sz) :
8-
dom(dom),
7+
circular_buffer::circular_buffer(rust_task *task, size_t unit_sz) :
8+
dom(task->dom),
9+
task(task),
910
unit_sz(unit_sz),
1011
_buffer_sz(initial_size()),
1112
_next(0),
1213
_unread(0),
13-
_buffer((uint8_t *)dom->malloc(_buffer_sz)) {
14+
_buffer((uint8_t *)task->malloc(_buffer_sz)) {
1415

1516
A(dom, unit_sz, "Unit size must be larger than zero.");
1617

@@ -26,7 +27,7 @@ circular_buffer::~circular_buffer() {
2627
I(dom, _buffer);
2728
W(dom, _unread == 0,
2829
"freeing circular_buffer with %d unread bytes", _unread);
29-
dom->free(_buffer);
30+
task->free(_buffer);
3031
}
3132

3233
size_t
@@ -141,9 +142,9 @@ circular_buffer::grow() {
141142
size_t new_buffer_sz = _buffer_sz * 2;
142143
I(dom, new_buffer_sz <= MAX_CIRCULAR_BUFFER_SIZE);
143144
DLOG(dom, mem, "circular_buffer is growing to %d bytes", new_buffer_sz);
144-
void *new_buffer = dom->malloc(new_buffer_sz);
145+
void *new_buffer = task->malloc(new_buffer_sz);
145146
transfer(new_buffer);
146-
dom->free(_buffer);
147+
task->free(_buffer);
147148
_buffer = (uint8_t *)new_buffer;
148149
_next = 0;
149150
_buffer_sz = new_buffer_sz;
@@ -154,9 +155,9 @@ circular_buffer::shrink() {
154155
size_t new_buffer_sz = _buffer_sz / 2;
155156
I(dom, initial_size() <= new_buffer_sz);
156157
DLOG(dom, mem, "circular_buffer is shrinking to %d bytes", new_buffer_sz);
157-
void *new_buffer = dom->malloc(new_buffer_sz);
158+
void *new_buffer = task->malloc(new_buffer_sz);
158159
transfer(new_buffer);
159-
dom->free(_buffer);
160+
task->free(_buffer);
160161
_buffer = (uint8_t *)new_buffer;
161162
_next = 0;
162163
_buffer_sz = new_buffer_sz;

trunk/src/rt/circular_buffer.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@
66
#define CIRCULAR_BUFFER_H
77

88
class
9-
circular_buffer : public dom_owned<circular_buffer> {
9+
circular_buffer : public task_owned<circular_buffer> {
1010
static const size_t INITIAL_CIRCULAR_BUFFER_SIZE_IN_UNITS = 8;
1111
static const size_t MAX_CIRCULAR_BUFFER_SIZE = 1 << 24;
1212

13-
public:
1413
rust_dom *dom;
14+
15+
public:
16+
rust_task *task;
1517
// Size of the data unit in bytes.
1618
const size_t unit_sz;
17-
circular_buffer(rust_dom *dom, size_t unit_sz);
19+
circular_buffer(rust_task *task, size_t unit_sz);
1820
~circular_buffer();
1921
void transfer(void *dst);
2022
void enqueue(void *src);

trunk/src/rt/memory.h

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,59 @@
1+
// -*- c++ -*-
12
#ifndef MEMORY_H
23
#define MEMORY_H
34

45
inline void *operator new(size_t size, void *mem) {
56
return mem;
67
}
78

8-
inline void *operator new(size_t size, rust_dom *dom) {
9-
return dom->malloc(size, memory_region::LOCAL);
9+
inline void *operator new(size_t size, rust_kernel *kernel) {
10+
return kernel->malloc(size);
1011
}
1112

12-
inline void *operator new[](size_t size, rust_dom *dom) {
13-
return dom->malloc(size, memory_region::LOCAL);
13+
inline void *operator new(size_t size, rust_task *task) {
14+
return task->malloc(size, memory_region::LOCAL);
1415
}
1516

16-
inline void *operator new(size_t size, rust_dom &dom) {
17-
return dom.malloc(size, memory_region::LOCAL);
17+
inline void *operator new[](size_t size, rust_task *task) {
18+
return task->malloc(size, memory_region::LOCAL);
1819
}
1920

20-
inline void *operator new[](size_t size, rust_dom &dom) {
21-
return dom.malloc(size, memory_region::LOCAL);
21+
inline void *operator new(size_t size, rust_task &task) {
22+
return task.malloc(size, memory_region::LOCAL);
2223
}
2324

24-
inline void *operator new(size_t size, rust_dom *dom,
25+
inline void *operator new[](size_t size, rust_task &task) {
26+
return task.malloc(size, memory_region::LOCAL);
27+
}
28+
29+
inline void *operator new(size_t size, rust_task *task,
2530
memory_region::memory_region_type type) {
26-
return dom->malloc(size, type);
31+
return task->malloc(size, type);
2732
}
2833

29-
inline void *operator new[](size_t size, rust_dom *dom,
34+
inline void *operator new[](size_t size, rust_task *task,
3035
memory_region::memory_region_type type) {
31-
return dom->malloc(size, type);
36+
return task->malloc(size, type);
3237
}
3338

34-
inline void *operator new(size_t size, rust_dom &dom,
39+
inline void *operator new(size_t size, rust_task &task,
3540
memory_region::memory_region_type type) {
36-
return dom.malloc(size, type);
41+
return task.malloc(size, type);
3742
}
3843

39-
inline void *operator new[](size_t size, rust_dom &dom,
44+
inline void *operator new[](size_t size, rust_task &task,
4045
memory_region::memory_region_type type) {
41-
return dom.malloc(size, type);
46+
return task.malloc(size, type);
4247
}
4348

44-
inline void operator delete(void *mem, rust_dom *dom) {
45-
dom->free(mem, memory_region::LOCAL);
49+
inline void operator delete(void *mem, rust_task *task) {
50+
task->free(mem, memory_region::LOCAL);
4651
return;
4752
}
4853

49-
inline void operator delete(void *mem, rust_dom *dom,
54+
inline void operator delete(void *mem, rust_task *task,
5055
memory_region::memory_region_type type) {
51-
dom->free(mem, type);
56+
task->free(mem, type);
5257
return;
5358
}
5459

trunk/src/rt/rust.cpp

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
#include "rust_internal.h"
22

33
struct
4-
command_line_args : public dom_owned<command_line_args>
4+
command_line_args : public kernel_owned<command_line_args>
55
{
6-
rust_dom *dom;
6+
rust_kernel *kernel;
7+
rust_task *task;
78
int argc;
89
char **argv;
910

1011
// vec[str] passed to rust_task::start.
1112
rust_vec *args;
1213

13-
command_line_args(rust_dom *dom,
14+
command_line_args(rust_task *task,
1415
int sys_argc,
1516
char **sys_argv)
16-
: dom(dom),
17+
: kernel(task->kernel),
18+
task(task),
1719
argc(sys_argc),
1820
argv(sys_argv),
1921
args(NULL)
2022
{
2123
#if defined(__WIN32__)
2224
LPCWSTR cmdline = GetCommandLineW();
2325
LPWSTR *wargv = CommandLineToArgvW(cmdline, &argc);
24-
dom->win32_require("CommandLineToArgvW", wargv != NULL);
26+
task->dom->win32_require("CommandLineToArgvW", wargv != NULL);
2527
argv = (char **) dom->malloc(sizeof(char*) * argc);
2628
for (int i = 0; i < argc; ++i) {
2729
int n_chars = WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1,
@@ -36,14 +38,14 @@ command_line_args : public dom_owned<command_line_args>
3638
#endif
3739
size_t vec_fill = sizeof(rust_str *) * argc;
3840
size_t vec_alloc = next_power_of_two(sizeof(rust_vec) + vec_fill);
39-
void *mem = dom->malloc(vec_alloc);
40-
args = new (mem) rust_vec(dom, vec_alloc, 0, NULL);
41+
void *mem = kernel->malloc(vec_alloc);
42+
args = new (mem) rust_vec(task->dom, vec_alloc, 0, NULL);
4143
rust_str **strs = (rust_str**) &args->data[0];
4244
for (int i = 0; i < argc; ++i) {
4345
size_t str_fill = strlen(argv[i]) + 1;
4446
size_t str_alloc = next_power_of_two(sizeof(rust_str) + str_fill);
45-
mem = dom->malloc(str_alloc);
46-
strs[i] = new (mem) rust_str(dom, str_alloc, str_fill,
47+
mem = kernel->malloc(str_alloc);
48+
strs[i] = new (mem) rust_str(task->dom, str_alloc, str_fill,
4749
(uint8_t const *)argv[i]);
4850
}
4951
args->fill = vec_fill;
@@ -58,15 +60,15 @@ command_line_args : public dom_owned<command_line_args>
5860
// Drop the args we've had pinned here.
5961
rust_str **strs = (rust_str**) &args->data[0];
6062
for (int i = 0; i < argc; ++i)
61-
dom->free(strs[i]);
62-
dom->free(args);
63+
kernel->free(strs[i]);
64+
kernel->free(args);
6365
}
6466

6567
#ifdef __WIN32__
6668
for (int i = 0; i < argc; ++i) {
67-
dom->free(argv[i]);
69+
task->free(argv[i]);
6870
}
69-
dom->free(argv);
71+
task->free(argv);
7072
#endif
7173
}
7274
};
@@ -97,7 +99,8 @@ rust_start(uintptr_t main_fn, int argc, char **argv, void* crate_map) {
9799
rust_kernel *kernel = new rust_kernel(srv);
98100
kernel->start();
99101
rust_dom *dom = kernel->get_domain();
100-
command_line_args *args = new (dom) command_line_args(dom, argc, argv);
102+
command_line_args *args
103+
= new (kernel) command_line_args(dom->root_task, argc, argv);
101104

102105
DLOG(dom, dom, "startup: %d args in 0x%" PRIxPTR,
103106
args->argc, (uintptr_t)args->args);

trunk/src/rt/rust_builtin.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ last_os_error(rust_task *task) {
4242
#endif
4343
size_t fill = strlen(buf) + 1;
4444
size_t alloc = next_power_of_two(sizeof(rust_str) + fill);
45-
void *mem = dom->malloc(alloc, memory_region::LOCAL);
45+
void *mem = task->malloc(alloc, memory_region::LOCAL);
4646
if (!mem) {
4747
task->fail(1);
4848
return NULL;
@@ -73,7 +73,7 @@ rust_getcwd(rust_task *task) {
7373

7474
size_t fill = strlen(cbuf) + 1;
7575
size_t alloc = next_power_of_two(sizeof(rust_str) + fill);
76-
void *mem = dom->malloc(alloc, memory_region::LOCAL);
76+
void *mem = task->malloc(alloc, memory_region::LOCAL);
7777
if (!mem) {
7878
task->fail(1);
7979
return NULL;
@@ -200,7 +200,7 @@ vec_alloc_with_data(rust_task *task,
200200
{
201201
rust_dom *dom = task->dom;
202202
size_t alloc = next_power_of_two(sizeof(rust_vec) + (n_elts * elt_size));
203-
void *mem = dom->malloc(alloc, memory_region::LOCAL);
203+
void *mem = task->malloc(alloc, memory_region::LOCAL);
204204
if (!mem) return NULL;
205205
return new (mem) rust_vec(dom, alloc, fill * elt_size, (uint8_t*)d);
206206
}

trunk/src/rt/rust_chan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ rust_chan::rust_chan(rust_task *task,
99
size_t unit_sz) :
1010
task(task),
1111
port(port),
12-
buffer(task->dom, unit_sz) {
12+
buffer(task, unit_sz) {
1313
++task->ref_count;
1414
if (port) {
1515
associate(port);

trunk/src/rt/rust_crate_cache.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ rust_crate_cache::get_type_desc(size_t size,
1616
return td;
1717
}
1818
DLOG(dom, cache, "rust_crate_cache::get_type_desc miss");
19-
td = (type_desc*) dom->malloc(sizeof(type_desc) + keysz);
19+
td = (type_desc*) dom->kernel->malloc(sizeof(type_desc) + keysz);
2020
if (!td)
2121
return NULL;
2222
// By convention, desc 0 is the root descriptor.
@@ -53,7 +53,7 @@ rust_crate_cache::flush() {
5353
type_desc *d = type_descs;
5454
HASH_DEL(type_descs, d);
5555
DLOG(dom, mem, "rust_crate_cache::flush() tydesc %" PRIxPTR, d);
56-
dom->free(d);
56+
dom->kernel->free(d);
5757
}
5858
}
5959

trunk/src/rt/rust_dom.cpp

Lines changed: 2 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ rust_dom::rust_dom(rust_kernel *kernel,
1010
_log(srv, this),
1111
log_lvl(log_note),
1212
srv(srv),
13-
local_region(&srv->local_region),
14-
synchronized_region(&srv->synchronized_region),
1513
name(name),
1614
newborn_tasks(this, "newborn"),
1715
running_tasks(this, "running"),
@@ -36,6 +34,7 @@ rust_dom::rust_dom(rust_kernel *kernel,
3634

3735
rust_dom::~rust_dom() {
3836
DLOG(this, dom, "~rust_dom %s @0x%" PRIxPTR, name, (uintptr_t)this);
37+
3938
newborn_tasks.delete_all();
4039
running_tasks.delete_all();
4140
blocked_tasks.delete_all();
@@ -75,69 +74,6 @@ rust_dom::fail() {
7574
rval = 1;
7675
}
7776

78-
void *
79-
rust_dom::malloc(size_t size) {
80-
return malloc(size, memory_region::LOCAL);
81-
}
82-
83-
void *
84-
rust_dom::malloc(size_t size, memory_region::memory_region_type type) {
85-
if (type == memory_region::LOCAL) {
86-
return local_region.malloc(size);
87-
} else if (type == memory_region::SYNCHRONIZED) {
88-
return synchronized_region.malloc(size);
89-
}
90-
I(this, false);
91-
return NULL;
92-
}
93-
94-
void *
95-
rust_dom::calloc(size_t size) {
96-
return calloc(size, memory_region::LOCAL);
97-
}
98-
99-
void *
100-
rust_dom::calloc(size_t size, memory_region::memory_region_type type) {
101-
if (type == memory_region::LOCAL) {
102-
return local_region.calloc(size);
103-
} else if (type == memory_region::SYNCHRONIZED) {
104-
return synchronized_region.calloc(size);
105-
}
106-
return NULL;
107-
}
108-
109-
void *
110-
rust_dom::realloc(void *mem, size_t size) {
111-
return realloc(mem, size, memory_region::LOCAL);
112-
}
113-
114-
void *
115-
rust_dom::realloc(void *mem, size_t size,
116-
memory_region::memory_region_type type) {
117-
if (type == memory_region::LOCAL) {
118-
return local_region.realloc(mem, size);
119-
} else if (type == memory_region::SYNCHRONIZED) {
120-
return synchronized_region.realloc(mem, size);
121-
}
122-
return NULL;
123-
}
124-
125-
void
126-
rust_dom::free(void *mem) {
127-
free(mem, memory_region::LOCAL);
128-
}
129-
130-
void
131-
rust_dom::free(void *mem, memory_region::memory_region_type type) {
132-
DLOG(this, mem, "rust_dom::free(0x%" PRIxPTR ")", mem);
133-
if (type == memory_region::LOCAL) {
134-
local_region.free(mem);
135-
} else if (type == memory_region::SYNCHRONIZED) {
136-
synchronized_region.free(mem);
137-
}
138-
return;
139-
}
140-
14177
#ifdef __WIN32__
14278
void
14379
rust_dom::win32_require(LPCTSTR fn, BOOL ok) {
@@ -372,7 +308,7 @@ rust_dom::get_cache() {
372308
rust_task *
373309
rust_dom::create_task(rust_task *spawner, const char *name) {
374310
rust_task *task =
375-
new (this) rust_task (this, &newborn_tasks, spawner, name);
311+
new (this->kernel) rust_task (this, &newborn_tasks, spawner, name);
376312
DLOG(this, task, "created task: " PTR ", spawner: %s, name: %s",
377313
task, spawner ? spawner->name : "null", name);
378314
newborn_tasks.append(task);

0 commit comments

Comments
 (0)