diff options
Diffstat (limited to 'src/rt/rust_kernel.cpp')
| -rw-r--r-- | src/rt/rust_kernel.cpp | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp index 3d74571c373..3b9a60a3064 100644 --- a/src/rt/rust_kernel.cpp +++ b/src/rt/rust_kernel.cpp @@ -7,18 +7,16 @@ #define KLOG_ERR_(field, ...) \ KLOG_LVL(this, field, log_err, __VA_ARGS__) -rust_kernel::rust_kernel(rust_srv *srv, size_t num_threads) : +rust_kernel::rust_kernel(rust_srv *srv) : _region(srv, true), _log(srv, NULL), srv(srv), live_tasks(0), max_task_id(0), rval(0), + live_schedulers(0), env(srv->env) { - sched = new (this, "rust_scheduler") - rust_scheduler(this, srv, num_threads, 0); - live_schedulers = 1; } void @@ -56,27 +54,22 @@ void rust_kernel::free(void *mem) { _region.free(mem); } -int rust_kernel::start_schedulers() -{ - I(this, !sched_lock.lock_held_by_current_thread()); - sched->start_task_threads(); - { - scoped_lock with(sched_lock); - // Schedulers could possibly have already exited - if (live_schedulers != 0) { - sched_lock.wait(); - } - return rval; - } +rust_sched_id +rust_kernel::create_scheduler(size_t num_threads) { + I(this, live_schedulers == 0); + sched = new (this, "rust_scheduler") + rust_scheduler(this, srv, num_threads, 0); + live_schedulers = 1; + return 0; } rust_scheduler * -rust_kernel::get_default_scheduler() { +rust_kernel::get_scheduler_by_id(rust_sched_id id) { return sched; } void -rust_kernel::release_scheduler() { +rust_kernel::release_scheduler_id(rust_sched_id id) { I(this, !sched_lock.lock_held_by_current_thread()); scoped_lock with(sched_lock); delete sched; @@ -87,6 +80,21 @@ rust_kernel::release_scheduler() { } } +int +rust_kernel::wait_for_schedulers() +{ + I(this, !sched_lock.lock_held_by_current_thread()); + sched->start_task_threads(); + { + scoped_lock with(sched_lock); + // Schedulers could possibly have already exited + if (live_schedulers != 0) { + sched_lock.wait(); + } + return rval; + } +} + void rust_kernel::fail() { // FIXME: On windows we're getting "Application has requested the |
