File tree 1 file changed +19
-4
lines changed
1 file changed +19
-4
lines changed Original file line number Diff line number Diff line change @@ -497,11 +497,26 @@ pub fn try<T:Send>(f: ~fn() -> T) -> Result<T,()> {
497
497
pub fn yield ( ) {
498
498
//! Yield control to the task scheduler
499
499
500
+ use rt:: { context, OldTaskContext } ;
501
+ use rt:: local:: Local ;
502
+ use rt:: sched:: Scheduler ;
503
+
500
504
unsafe {
501
- let task_ = rt:: rust_get_task ( ) ;
502
- let killed = rt:: rust_task_yield ( task_) ;
503
- if killed && !failing ( ) {
504
- fail ! ( "killed" ) ;
505
+ match context ( ) {
506
+ OldTaskContext => {
507
+ let task_ = rt:: rust_get_task ( ) ;
508
+ let killed = rt:: rust_task_yield ( task_) ;
509
+ if killed && !failing ( ) {
510
+ fail ! ( "killed" ) ;
511
+ }
512
+ }
513
+ _ => {
514
+ // XXX: What does yield really mean in newsched?
515
+ let sched = Local :: take :: < Scheduler > ( ) ;
516
+ do sched. deschedule_running_task_and_then |sched, task| {
517
+ sched. enqueue_task ( task) ;
518
+ }
519
+ }
505
520
}
506
521
}
507
522
}
You can’t perform that action at this time.
0 commit comments