diff options
| author | Eric Reed <ereed@mozilla.com> | 2013-07-02 16:55:56 -0700 |
|---|---|---|
| committer | Eric Reed <ereed@mozilla.com> | 2013-07-02 16:55:56 -0700 |
| commit | 6a1a7819c9cb15e280681c547548ff8d47412f04 (patch) | |
| tree | 98e24ea7db8125c3ef0fb2ae70c7ff7eace03ea0 /src/libstd/task | |
| parent | e6c57793be2cf7aabfa96aeada77935cc0351067 (diff) | |
| parent | f8a4d09f7efb618ca3f8b70374e158504cb33cb0 (diff) | |
| download | rust-6a1a7819c9cb15e280681c547548ff8d47412f04.tar.gz rust-6a1a7819c9cb15e280681c547548ff8d47412f04.zip | |
Merge remote-tracking branch 'upstream/io' into io
Conflicts: src/libstd/rt/test.rs src/rt/rustrt.def.in
Diffstat (limited to 'src/libstd/task')
| -rw-r--r-- | src/libstd/task/mod.rs | 1 | ||||
| -rw-r--r-- | src/libstd/task/spawn.rs | 27 |
2 files changed, 20 insertions, 8 deletions
diff --git a/src/libstd/task/mod.rs b/src/libstd/task/mod.rs index 99858feab22..b0fc6b2884f 100644 --- a/src/libstd/task/mod.rs +++ b/src/libstd/task/mod.rs @@ -1182,3 +1182,4 @@ fn test_simple_newsched_spawn() { spawn(||()) } } + diff --git a/src/libstd/task/spawn.rs b/src/libstd/task/spawn.rs index 63eb768d1c9..aea8cda6a21 100644 --- a/src/libstd/task/spawn.rs +++ b/src/libstd/task/spawn.rs @@ -581,13 +581,20 @@ pub fn spawn_raw(opts: TaskOpts, f: ~fn()) { fn spawn_raw_newsched(mut opts: TaskOpts, f: ~fn()) { use rt::sched::*; - let mut task = if opts.linked { - do Local::borrow::<Task, ~Task>() |running_task| { - ~running_task.new_child() + let f = Cell::new(f); + + let mut task = unsafe { + let sched = Local::unsafe_borrow::<Scheduler>(); + rtdebug!("unsafe borrowed sched"); + + if opts.linked { + do Local::borrow::<Task, ~Task>() |running_task| { + ~running_task.new_child(&mut (*sched).stack_pool, f.take()) + } + } else { + // An unlinked task is a new root in the task tree + ~Task::new_root(&mut (*sched).stack_pool, f.take()) } - } else { - // An unlinked task is a new root in the task tree - ~Task::new_root() }; if opts.notify_chan.is_some() { @@ -601,9 +608,13 @@ fn spawn_raw_newsched(mut opts: TaskOpts, f: ~fn()) { task.on_exit = Some(on_exit); } + rtdebug!("spawn about to take scheduler"); + let mut sched = Local::take::<Scheduler>(); - let task = ~Coroutine::with_task(&mut sched.stack_pool, - task, f); + rtdebug!("took sched in spawn"); +// let task = ~Coroutine::with_task(&mut sched.stack_pool, +// task, f); +// let task = ~Task::new_root(&mut sched.stack_pool, f); sched.schedule_task(task); } |
