diff options
| author | Brian Anderson <banderson@mozilla.com> | 2013-01-08 19:46:12 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-01-15 18:00:19 -0800 |
| commit | 090b247056a9dd2d4d4a32c631fe2f0ddd3e744d (patch) | |
| tree | b7b9d7ab483fa7150480f90c9a5ad69905753685 /src/libcore/task/spawn.rs | |
| parent | 989667e545cb45265d3cb4b19500224459c3bf8c (diff) | |
| download | rust-090b247056a9dd2d4d4a32c631fe2f0ddd3e744d.tar.gz rust-090b247056a9dd2d4d4a32c631fe2f0ddd3e744d.zip | |
Spawn new tasks onto the primary scheduler by default. #3760
Diffstat (limited to 'src/libcore/task/spawn.rs')
| -rw-r--r-- | src/libcore/task/spawn.rs | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/src/libcore/task/spawn.rs b/src/libcore/task/spawn.rs index 1c5531303e1..e3afa7c4535 100644 --- a/src/libcore/task/spawn.rs +++ b/src/libcore/task/spawn.rs @@ -88,6 +88,7 @@ use task::rt::rust_closure; use task::rt; use task::{Failure, ManualThreads, PlatformThread, SchedOpts, SingleThreaded}; use task::{Success, TaskOpts, TaskResult, ThreadPerCore, ThreadPerTask}; +use task::{ExistingScheduler, SchedulerHandle}; use task::{default_task_opts, unkillable}; use uint; use util; @@ -525,9 +526,9 @@ pub fn spawn_raw(opts: TaskOpts, f: fn~()) { // Agh. Get move-mode items into the closure. FIXME (#2829) let (child_tg, ancestors, f) = option::swap_unwrap(child_data); // Create child task. - let new_task = match opts.sched { - None => rt::new_task(), - Some(sched_opts) => new_task_in_new_sched(sched_opts) + let new_task = match opts.sched.mode { + DefaultScheduler => rt::new_task(), + _ => new_task_in_sched(opts.sched) }; assert !new_task.is_null(); // Getting killed after here would leak the task. @@ -631,12 +632,16 @@ pub fn spawn_raw(opts: TaskOpts, f: fn~()) { } } - fn new_task_in_new_sched(opts: SchedOpts) -> *rust_task { + fn new_task_in_sched(opts: SchedOpts) -> *rust_task { if opts.foreign_stack_size != None { fail ~"foreign_stack_size scheduler option unimplemented"; } let num_threads = match opts.mode { + DefaultScheduler + | CurrentScheduler + | ExistingScheduler(*) + | PlatformThread => 0u, /* Won't be used */ SingleThreaded => 1u, ThreadPerCore => rt::rust_num_threads(), ThreadPerTask => { @@ -648,13 +653,13 @@ pub fn spawn_raw(opts: TaskOpts, f: fn~()) { } threads } - PlatformThread => 0u /* Won't be used */ }; - let sched_id = if opts.mode != PlatformThread { - rt::rust_new_sched(num_threads) - } else { - rt::rust_osmain_sched_id() + let sched_id = match opts.mode { + CurrentScheduler => rt::rust_get_sched_id(), + ExistingScheduler(SchedulerHandle(id)) => id, + PlatformThread => rt::rust_osmain_sched_id(), + _ => rt::rust_new_sched(num_threads) }; rt::rust_new_task_in_sched(sched_id) } |
