diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-04-03 20:29:12 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-04-03 20:30:01 -0700 |
| commit | e325146eb436c4995385d8220ff7ac3a4a5f62ab (patch) | |
| tree | 999875912f33a00906c76f1eac278251bf63658a /src/rt/rust_kernel.h | |
| parent | bd97ee65200966e6c3b0fb45de1fc771c3cf5f3f (diff) | |
| parent | 4cf7efc8f7df215b0ff9e3ea15b7890b84db1b51 (diff) | |
| download | rust-e325146eb436c4995385d8220ff7ac3a4a5f62ab.tar.gz rust-e325146eb436c4995385d8220ff7ac3a4a5f62ab.zip | |
Merge remote-tracking branch 'brson/mainthread'
Conflicts: src/rt/rust_kernel.cpp src/rt/rust_scheduler.cpp src/rt/rust_scheduler.h
Diffstat (limited to 'src/rt/rust_kernel.h')
| -rw-r--r-- | src/rt/rust_kernel.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/rt/rust_kernel.h b/src/rt/rust_kernel.h index 0d96f78067f..6a7a7070c20 100644 --- a/src/rt/rust_kernel.h +++ b/src/rt/rust_kernel.h @@ -22,6 +22,9 @@ typedef intptr_t rust_port_id; typedef std::map<rust_sched_id, rust_scheduler*> sched_map; +class rust_sched_driver; +class rust_sched_launcher_factory; + /** * A global object shared by all thread domains. Most of the data structures * in this class are synchronized since they are accessed from multiple @@ -54,6 +57,13 @@ class rust_kernel { std::vector<rust_sched_id> join_list; rust_sched_reaper sched_reaper; + // The single-threaded scheduler that uses the main thread + rust_sched_id osmain_scheduler; + // Runs the single-threaded scheduler that executes tasks + // on the main thread + rust_sched_driver *osmain_driver; + + rust_scheduler* get_scheduler_by_id_nolock(rust_sched_id id); public: struct rust_env *env; @@ -71,11 +81,13 @@ public: void fail(); rust_sched_id create_scheduler(size_t num_threads); + rust_sched_id create_scheduler(rust_sched_launcher_factory *launchfac, + size_t num_threads, bool allow_exit); rust_scheduler* get_scheduler_by_id(rust_sched_id id); // Called by a scheduler to indicate that it is terminating void release_scheduler_id(rust_sched_id id); void wait_for_schedulers(); - int wait_for_exit(); + int run(); #ifdef __WIN32__ void win32_require(LPCTSTR fn, BOOL ok); @@ -88,6 +100,8 @@ public: void release_port_id(rust_port_id tid); void set_exit_status(int code); + + rust_sched_id osmain_sched_id() { return osmain_scheduler; } }; template <typename T> struct kernel_owned { |
