Skip to content

Commit c6d8324

Browse files
Eric Holkgraydon
authored andcommitted
There is only one domain per kernel now.
1 parent 1c852ac commit c6d8324

File tree

6 files changed

+21
-133
lines changed

6 files changed

+21
-133
lines changed

src/comp/back/upcall.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ type upcalls =
5555
ValueRef get_type_desc,
5656
ValueRef new_task,
5757
ValueRef start_task,
58-
ValueRef new_thread,
59-
ValueRef start_thread,
6058
ValueRef ivec_resize,
6159
ValueRef ivec_spill);
6260

@@ -118,10 +116,6 @@ fn declare_upcalls(type_names tn, ModuleRef llmod) -> @upcalls {
118116
start_task=d("start_task",
119117
[T_taskptr(tn), T_int(), T_int(), T_size_t()],
120118
T_taskptr(tn)),
121-
new_thread=d("new_thread", [T_ptr(T_i8())], T_taskptr(tn)),
122-
start_thread=d("start_thread",
123-
[T_taskptr(tn), T_int(), T_int(), T_int(),
124-
T_size_t()], T_taskptr(tn)),
125119
ivec_resize=d("ivec_resize", [T_ptr(T_opaque_ivec()), T_int()],
126120
T_void()),
127121
ivec_spill=d("ivec_spill", [T_ptr(T_opaque_ivec()), T_int()],

src/rt/rust.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ rust_start(uintptr_t main_fn, int argc, char **argv, void* crate_map) {
9696
rust_srv *srv = new rust_srv();
9797
rust_kernel *kernel = new rust_kernel(srv);
9898
kernel->start();
99-
rust_handle<rust_dom> *handle = kernel->create_domain("main");
100-
rust_dom *dom = handle->referent();
99+
rust_dom *dom = kernel->get_domain();
101100
command_line_args *args = new (dom) command_line_args(dom, argc, argv);
102101

103102
DLOG(dom, dom, "startup: %d args in 0x%" PRIxPTR,
@@ -114,8 +113,6 @@ rust_start(uintptr_t main_fn, int argc, char **argv, void* crate_map) {
114113

115114
int ret = dom->start_main_loops(num_threads);
116115
delete args;
117-
kernel->destroy_domain(dom);
118-
kernel->join_all_domains();
119116
delete kernel;
120117
delete srv;
121118

src/rt/rust_kernel.cpp

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,12 @@ rust_kernel::rust_kernel(rust_srv *srv) :
1111
_region(&srv->local_region),
1212
_log(srv, NULL),
1313
_srv(srv),
14-
_interrupt_kernel_loop(FALSE) {
15-
// Nop.
14+
_interrupt_kernel_loop(FALSE)
15+
{
16+
dom = create_domain("main");
1617
}
1718

18-
rust_handle<rust_dom> *
19+
rust_dom *
1920
rust_kernel::create_domain(const char *name) {
2021
_kernel_lock.lock();
2122
rust_message_queue *message_queue =
@@ -25,21 +26,19 @@ rust_kernel::create_domain(const char *name) {
2526
new (this) rust_dom(this, message_queue, srv, name);
2627
rust_handle<rust_dom> *handle = internal_get_dom_handle(dom);
2728
message_queue->associate(handle);
28-
domains.append(dom);
2929
message_queues.append(message_queue);
30-
KLOG("created domain: " PTR ", name: %s, index: %d, domains %d",
31-
dom, name, dom->list_index, domains.length());
30+
KLOG("created domain: " PTR ", name: %s, index: %d",
31+
dom, name, dom->list_index);
3232
_kernel_lock.signal_all();
3333
_kernel_lock.unlock();
34-
return handle;
34+
return dom;
3535
}
3636

3737
void
38-
rust_kernel::destroy_domain(rust_dom *dom) {
38+
rust_kernel::destroy_domain() {
3939
_kernel_lock.lock();
40-
KLOG("deleting domain: " PTR ", name: %s, index: %d, domains %d",
41-
dom, dom->name, dom->list_index, domains.length());
42-
domains.remove(dom);
40+
KLOG("deleting domain: " PTR ", name: %s, index: %d",
41+
dom, dom->name, dom->list_index);
4342
dom->message_queue->disassociate();
4443
rust_srv *srv = dom->srv;
4544
delete dom;
@@ -96,22 +95,10 @@ rust_kernel::get_port_handle(rust_port *port) {
9695
return handle;
9796
}
9897

99-
void
100-
rust_kernel::join_all_domains() {
101-
_kernel_lock.lock();
102-
while (domains.length() > 0) {
103-
_kernel_lock.wait();
104-
}
105-
_kernel_lock.unlock();
106-
KLOG("joined domains");
107-
}
108-
10998
void
11099
rust_kernel::log_all_domain_state() {
111-
KLOG("log_all_domain_state: %d domains", domains.length());
112-
for (uint32_t i = 0; i < domains.length(); i++) {
113-
domains[i]->log_state();
114-
}
100+
KLOG("log_all_domain_state");
101+
dom->log_state();
115102
}
116103

117104
/**
@@ -172,9 +159,7 @@ rust_kernel::terminate_kernel_loop() {
172159
}
173160

174161
rust_kernel::~rust_kernel() {
175-
K(_srv, domains.length() == 0,
176-
"Kernel has %d live domain(s), join all domains before killing "
177-
"the kernel.", domains.length());
162+
destroy_domain();
178163

179164
terminate_kernel_loop();
180165

src/rt/rust_kernel.h

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class rust_kernel : public rust_thread {
4444
rust_log _log;
4545
rust_srv *_srv;
4646

47+
rust_dom *dom;
48+
4749
/**
4850
* Task proxy objects are kernel owned handles to Rust objects.
4951
*/
@@ -64,12 +66,10 @@ class rust_kernel : public rust_thread {
6466

6567
rust_handle<rust_dom> *internal_get_dom_handle(rust_dom *dom);
6668

67-
public:
69+
rust_dom *create_domain(const char *name);
70+
void destroy_domain();
6871

69-
/**
70-
* List of domains that are currently executing.
71-
*/
72-
indexed_list<rust_dom> domains;
72+
public:
7373

7474
/**
7575
* Message queues are kernel objects and are associated with domains.
@@ -86,9 +86,6 @@ class rust_kernel : public rust_thread {
8686

8787
rust_kernel(rust_srv *srv);
8888

89-
rust_handle<rust_dom> *create_domain(const char *name);
90-
void destroy_domain(rust_dom *dom);
91-
9289
bool is_deadlocked();
9390

9491
void signal_kernel_lock();
@@ -101,17 +98,14 @@ class rust_kernel : public rust_thread {
10198
void
10299
notify_message_enqueued(rust_message_queue *queue, rust_message *message);
103100

104-
/**
105-
* Blocks until all domains have terminated.
106-
*/
107-
void join_all_domains();
108-
109101
void log_all_domain_state();
110102
void log(uint32_t level, char const *fmt, ...);
111103
virtual ~rust_kernel();
112104

113105
void *malloc(size_t size);
114106
void free(void *mem);
107+
108+
inline rust_dom *get_domain() const { return dom; }
115109
};
116110

117111
inline void *operator new(size_t size, rust_kernel *kernel) {

src/rt/rust_upcall.cpp

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -556,86 +556,6 @@ upcall_start_task(rust_task *spawner,
556556
return task;
557557
}
558558

559-
/**
560-
* Called whenever a new domain is created.
561-
*/
562-
extern "C" CDECL maybe_proxy<rust_task> *
563-
upcall_new_thread(rust_task *task, const char *name) {
564-
I(task->dom, false);
565-
LOG_UPCALL_ENTRY(task);
566-
rust_dom *parent_dom = task->dom;
567-
rust_kernel *kernel = parent_dom->kernel;
568-
rust_handle<rust_dom> *child_dom_handle =
569-
kernel->create_domain(name);
570-
rust_handle<rust_task> *child_task_handle =
571-
kernel->get_task_handle(child_dom_handle->referent()->root_task);
572-
LOG(task, mem, "child name: %s, child_dom_handle: " PTR
573-
", child_task_handle: " PTR,
574-
name, child_dom_handle, child_task_handle);
575-
rust_proxy<rust_task> *child_task_proxy =
576-
new rust_proxy<rust_task> (child_task_handle);
577-
return child_task_proxy;
578-
}
579-
580-
#if 0 /* FIXME: this code will be re-enabled once we have multithreading. */
581-
582-
#if defined(__WIN32__)
583-
static DWORD WINAPI rust_thread_start(void *ptr)
584-
#elif defined(__GNUC__)
585-
static void *rust_thread_start(void *ptr)
586-
#else
587-
#error "Platform not supported"
588-
#endif
589-
{
590-
// We were handed the domain we are supposed to run.
591-
rust_dom *dom = (rust_dom *) ptr;
592-
593-
// Start a new rust main loop for this thread.
594-
dom->start_main_loop();
595-
596-
// Destroy the domain.
597-
dom->kernel->destroy_domain(dom);
598-
599-
return 0;
600-
}
601-
602-
#endif
603-
604-
/**
605-
* Called after a new domain is created. Here we create a new thread and
606-
* and start the domain main loop.
607-
*/
608-
extern "C" CDECL maybe_proxy<rust_task> *
609-
upcall_start_thread(rust_task *task,
610-
rust_proxy<rust_task> *child_task_proxy,
611-
uintptr_t spawnee_fn,
612-
size_t callsz) {
613-
I(task->dom, false);
614-
LOG_UPCALL_ENTRY(task);
615-
#if 0
616-
rust_dom *parenet_dom = task->dom;
617-
rust_handle<rust_task> *child_task_handle = child_task_proxy->handle();
618-
LOG(task, task,
619-
"spawnee_fn " PTR
620-
", callsz %" PRIdPTR ")",
621-
spawnee_fn, callsz);
622-
rust_task *child_task = child_task_handle->referent();
623-
child_task->start(spawnee_fn,
624-
task->rust_sp, callsz);
625-
#if defined(__WIN32__)
626-
HANDLE thread;
627-
thread = CreateThread(NULL, 0, rust_thread_start, child_task->dom, 0,
628-
NULL);
629-
parenet_dom->win32_require("CreateThread", thread != NULL);
630-
#else
631-
pthread_t thread;
632-
pthread_create(&thread, &parenet_dom->attr, rust_thread_start,
633-
(void *) child_task->dom);
634-
#endif
635-
#endif // 0
636-
return child_task_proxy;
637-
}
638-
639559
/**
640560
* Resizes an interior vector that has been spilled to the heap.
641561
*/

src/rt/rustrt.def.in

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,11 @@ upcall_new_chan
6767
upcall_new_port
6868
upcall_new_str
6969
upcall_new_task
70-
upcall_new_thread
7170
upcall_new_vec
7271
upcall_recv
7372
upcall_send
7473
upcall_sleep
7574
upcall_start_task
76-
upcall_start_thread
7775
upcall_trace_str
7876
upcall_trace_word
7977
upcall_vec_append

0 commit comments

Comments
 (0)