@@ -59,7 +59,7 @@ Several modules in `core` are clients of `rt`:
59
59
use cell:: Cell ;
60
60
use clone:: Clone ;
61
61
use container:: Container ;
62
- use iterator:: { Iterator , range } ;
62
+ use iterator:: Iterator ;
63
63
use option:: { Option , None , Some } ;
64
64
use ptr:: RawPtr ;
65
65
use rt:: local:: Local ;
@@ -71,7 +71,8 @@ use rt::work_queue::WorkQueue;
71
71
use rt:: uv:: uvio:: UvEventLoop ;
72
72
use unstable:: atomics:: { AtomicInt , SeqCst } ;
73
73
use unstable:: sync:: UnsafeArc ;
74
- use vec:: { OwnedVector , MutableVector } ;
74
+ use vec;
75
+ use vec:: { OwnedVector , MutableVector , ImmutableVector } ;
75
76
76
77
/// The global (exchange) heap.
77
78
pub mod global_heap;
@@ -251,25 +252,21 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int {
251
252
252
253
// Create a work queue for each scheduler, ntimes. Create an extra
253
254
// for the main thread if that flag is set. We won't steal from it.
254
- let mut work_queues = ~[ ] ;
255
- for _ in range ( 0 u, nscheds) {
256
- let work_queue: WorkQueue < ~Task > = WorkQueue :: new ( ) ;
257
- work_queues. push ( work_queue) ;
258
- }
255
+ let work_queues: ~[ WorkQueue < ~Task > ] = vec:: from_fn ( nscheds, |_| WorkQueue :: new ( ) ) ;
259
256
260
257
// The schedulers.
261
258
let mut scheds = ~[ ] ;
262
259
// Handles to the schedulers. When the main task ends these will be
263
260
// sent the Shutdown message to terminate the schedulers.
264
261
let mut handles = ~[ ] ;
265
262
266
- for i in range ( 0 u , nscheds ) {
263
+ for work_queue in work_queues . iter ( ) {
267
264
rtdebug ! ( "inserting a regular scheduler" ) ;
268
265
269
266
// Every scheduler is driven by an I/O event loop.
270
267
let loop_ = ~UvEventLoop :: new ( ) ;
271
268
let mut sched = ~Scheduler :: new ( loop_,
272
- work_queues [ i ] . clone ( ) ,
269
+ work_queue . clone ( ) ,
273
270
work_queues. clone ( ) ,
274
271
sleepers. clone ( ) ) ;
275
272
let handle = sched. make_handle ( ) ;
@@ -358,9 +355,8 @@ fn run_(main: ~fn(), use_main_sched: bool) -> int {
358
355
}
359
356
360
357
// Run each remaining scheduler in a thread.
361
- while ! scheds. is_empty ( ) {
358
+ for sched in scheds. move_rev_iter ( ) {
362
359
rtdebug ! ( "creating regular schedulers" ) ;
363
- let sched = scheds. pop ( ) ;
364
360
let sched_cell = Cell :: new ( sched) ;
365
361
let thread = do Thread :: start {
366
362
let mut sched = sched_cell. take ( ) ;
0 commit comments