diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-04-18 18:38:12 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-04-19 12:05:18 -0700 |
| commit | 15ece0c23ef9b2e696ea4e81bf088e37fedc5d01 (patch) | |
| tree | e0a86454bba7b00ad58c75fb81e43b39461f6d08 /src/libcore/rt | |
| parent | 6773b63671081c722761d3980393642452c08157 (diff) | |
| download | rust-15ece0c23ef9b2e696ea4e81bf088e37fedc5d01.tar.gz rust-15ece0c23ef9b2e696ea4e81bf088e37fedc5d01.zip | |
core: Wire up `spawn` to the new scheduler
It will check which scheduler it is running under and create the correct type of task as appropriate. Most options aren't supported but basic spawning works.
Diffstat (limited to 'src/libcore/rt')
| -rw-r--r-- | src/libcore/rt/mod.rs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/libcore/rt/mod.rs b/src/libcore/rt/mod.rs index ba61b49d14a..2b9f147bf62 100644 --- a/src/libcore/rt/mod.rs +++ b/src/libcore/rt/mod.rs @@ -160,3 +160,24 @@ fn test_context() { sched.run(); } } + +// For setting up tests of the new scheduler +#[cfg(test)] +pub fn run_in_newsched_task(f: ~fn()) { + use cell::Cell; + use unstable::run_in_bare_thread; + use self::sched::{Scheduler, Task}; + use self::uvio::UvEventLoop; + + let f = Cell(Cell(f)); + + do run_in_bare_thread { + let mut sched = ~UvEventLoop::new_scheduler(); + let f = f.take(); + let task = ~do Task::new(&mut sched.stack_pool) { + (f.take())(); + }; + sched.task_queue.push_back(task); + sched.run(); + } +} |
