@@ -155,7 +155,7 @@ impl Scheduler {
155
155
156
156
rtdebug ! ( "run taking sched" ) ;
157
157
let sched = Local :: take :: < Scheduler > ( ) ;
158
- // XXX: Reenable this once we're using a per-task queue. With a shared
158
+ // XXX: Reenable this once we're using a per-scheduler queue. With a shared
159
159
// queue this is not true
160
160
//assert!(sched.work_queue.is_empty());
161
161
rtdebug ! ( "scheduler metrics: %s\n " , {
@@ -191,29 +191,29 @@ impl Scheduler {
191
191
if sched. resume_task_from_queue ( ) {
192
192
// We performed a scheduling action. There may be other work
193
193
// to do yet, so let's try again later.
194
- let mut sched = Local :: take :: < Scheduler > ( ) ;
195
- sched. metrics . tasks_resumed_from_queue += 1 ;
196
- sched. event_loop . callback ( Scheduler :: run_sched_once) ;
197
- Local :: put ( sched ) ;
194
+ do Local :: borrow :: < Scheduler , ( ) > |sched| {
195
+ sched. metrics . tasks_resumed_from_queue += 1 ;
196
+ sched. event_loop . callback ( Scheduler :: run_sched_once) ;
197
+ }
198
198
return;
199
199
}
200
200
201
201
// If we got here then there was no work to do.
202
202
// Generate a SchedHandle and push it to the sleeper list so
203
203
// somebody can wake us up later.
204
204
rtdebug ! ( "no work to do" ) ;
205
- let mut sched = Local :: take :: < Scheduler > ( ) ;
206
- sched. metrics . wasted_turns += 1 ;
207
- if !sched. sleepy && !sched. no_sleep {
208
- rtdebug ! ( "sleeping" ) ;
209
- sched. metrics . sleepy_times += 1 ;
210
- sched. sleepy = true ;
211
- let handle = sched. make_handle ( ) ;
212
- sched. sleeper_list . push ( handle) ;
213
- } else {
214
- rtdebug ! ( "not sleeping" ) ;
205
+ do Local :: borrow :: < Scheduler , ( ) > |sched| {
206
+ sched. metrics . wasted_turns += 1 ;
207
+ if !sched. sleepy && !sched. no_sleep {
208
+ rtdebug ! ( "sleeping" ) ;
209
+ sched. metrics . sleepy_times += 1 ;
210
+ sched. sleepy = true ;
211
+ let handle = sched. make_handle ( ) ;
212
+ sched. sleeper_list . push ( handle) ;
213
+ } else {
214
+ rtdebug ! ( "not sleeping" ) ;
215
+ }
215
216
}
216
- Local :: put ( sched) ;
217
217
}
218
218
219
219
pub fn make_handle ( & mut self ) -> SchedHandle {
@@ -441,8 +441,7 @@ impl Scheduler {
441
441
// here we know we are home, execute now OR we know we
442
442
// aren't homed, and that this sched doesn't care
443
443
do this. switch_running_tasks_and_then ( task) |sched, last_task| {
444
- let last_task = Cell :: new ( last_task) ;
445
- sched. enqueue_task ( last_task. take ( ) ) ;
444
+ sched. enqueue_task ( last_task) ;
446
445
}
447
446
} else if !homed && !this. run_anything {
448
447
// the task isn't homed, but it can't be run here
@@ -1141,4 +1140,4 @@ mod test {
1141
1140
}
1142
1141
}
1143
1142
}
1144
- }
1143
+ }
0 commit comments