@@ -177,7 +177,7 @@ impl Scheduler {
177
177
178
178
rtdebug ! ( "run taking sched" ) ;
179
179
let sched = Local :: take :: < Scheduler > ( ) ;
180
- // XXX: Reenable this once we're using a per-task queue. With a shared
180
+ // XXX: Reenable this once we're using a per-scheduler queue. With a shared
181
181
// queue this is not true
182
182
//assert!(sched.work_queue.is_empty());
183
183
rtdebug ! ( "scheduler metrics: %s\n " , {
@@ -213,29 +213,29 @@ impl Scheduler {
213
213
if sched. resume_task_from_queue ( ) {
214
214
// We performed a scheduling action. There may be other work
215
215
// to do yet, so let's try again later.
216
- let mut sched = Local :: take :: < Scheduler > ( ) ;
217
- sched. metrics . tasks_resumed_from_queue += 1 ;
218
- sched. event_loop . callback ( Scheduler :: run_sched_once) ;
219
- Local :: put ( sched ) ;
216
+ do Local :: borrow :: < Scheduler , ( ) > |sched| {
217
+ sched. metrics . tasks_resumed_from_queue += 1 ;
218
+ sched. event_loop . callback ( Scheduler :: run_sched_once) ;
219
+ }
220
220
return;
221
221
}
222
222
223
223
// If we got here then there was no work to do.
224
224
// Generate a SchedHandle and push it to the sleeper list so
225
225
// somebody can wake us up later.
226
226
rtdebug ! ( "no work to do" ) ;
227
- let mut sched = Local :: take :: < Scheduler > ( ) ;
228
- sched. metrics . wasted_turns += 1 ;
229
- if !sched. sleepy && !sched. no_sleep {
230
- rtdebug ! ( "sleeping" ) ;
231
- sched. metrics . sleepy_times += 1 ;
232
- sched. sleepy = true ;
233
- let handle = sched. make_handle ( ) ;
234
- sched. sleeper_list . push ( handle) ;
235
- } else {
236
- rtdebug ! ( "not sleeping" ) ;
227
+ do Local :: borrow :: < Scheduler , ( ) > |sched| {
228
+ sched. metrics . wasted_turns += 1 ;
229
+ if !sched. sleepy && !sched. no_sleep {
230
+ rtdebug ! ( "sleeping" ) ;
231
+ sched. metrics . sleepy_times += 1 ;
232
+ sched. sleepy = true ;
233
+ let handle = sched. make_handle ( ) ;
234
+ sched. sleeper_list . push ( handle) ;
235
+ } else {
236
+ rtdebug ! ( "not sleeping" ) ;
237
+ }
237
238
}
238
- Local :: put ( sched) ;
239
239
}
240
240
241
241
pub fn make_handle ( & mut self ) -> SchedHandle {
@@ -462,8 +462,7 @@ impl Scheduler {
462
462
// here we know we are home, execute now OR we know we
463
463
// aren't homed, and that this sched doesn't care
464
464
do this. switch_running_tasks_and_then ( task) |sched, last_task| {
465
- let last_task = Cell :: new ( last_task) ;
466
- sched. enqueue_task ( last_task. take ( ) ) ;
465
+ sched. enqueue_task ( last_task) ;
467
466
}
468
467
} else if !homed && !this. run_anything {
469
468
// the task isn't homed, but it can't be run here
0 commit comments