std: Add a yield implementation for newsched
This commit is contained in:
parent
7826651335
commit
29c9443d85
1 changed files with 19 additions and 4 deletions
|
@ -497,11 +497,26 @@ pub fn try<T:Send>(f: ~fn() -> T) -> Result<T,()> {
|
||||||
pub fn yield() {
|
pub fn yield() {
|
||||||
//! Yield control to the task scheduler
|
//! Yield control to the task scheduler
|
||||||
|
|
||||||
|
use rt::{context, OldTaskContext};
|
||||||
|
use rt::local::Local;
|
||||||
|
use rt::sched::Scheduler;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let task_ = rt::rust_get_task();
|
match context() {
|
||||||
let killed = rt::rust_task_yield(task_);
|
OldTaskContext => {
|
||||||
if killed && !failing() {
|
let task_ = rt::rust_get_task();
|
||||||
fail!("killed");
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue