diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-07-08 18:06:17 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-07-08 18:06:17 -0700 |
| commit | 29c9443d854073feeceb7ec2afa5841d9d1242af (patch) | |
| tree | f15338cfc8d0b3e5ac3336eaf33d82e5c7460982 /src/libstd/task | |
| parent | 7826651335b81f4630aa4d0d43a5de95b96d2311 (diff) | |
| download | rust-29c9443d854073feeceb7ec2afa5841d9d1242af.tar.gz rust-29c9443d854073feeceb7ec2afa5841d9d1242af.zip | |
std: Add a yield implementation for newsched
Diffstat (limited to 'src/libstd/task')
| -rw-r--r-- | src/libstd/task/mod.rs | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/libstd/task/mod.rs b/src/libstd/task/mod.rs index ae8f1c2101d..5a3ff10ae83 100644 --- a/src/libstd/task/mod.rs +++ b/src/libstd/task/mod.rs @@ -497,11 +497,26 @@ pub fn try<T:Send>(f: ~fn() -> T) -> Result<T,()> { pub fn yield() { //! Yield control to the task scheduler + use rt::{context, OldTaskContext}; + use rt::local::Local; + use rt::sched::Scheduler; + unsafe { - let task_ = rt::rust_get_task(); - let killed = rt::rust_task_yield(task_); - if killed && !failing() { - fail!("killed"); + match context() { + OldTaskContext => { + let task_ = rt::rust_get_task(); + let killed = rt::rust_task_yield(task_); + if killed && !failing() { + fail!("killed"); + } + } + _ => { + // XXX: What does yield really mean in newsched? + let sched = Local::take::<Scheduler>(); + do sched.deschedule_running_task_and_then |sched, task| { + sched.enqueue_task(task); + } + } } } } |
