diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-02-14 11:58:27 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-02-14 13:51:15 -0800 |
| commit | a53a08e1b980e5cf5f9707ef1d1f27b89ff7ed99 (patch) | |
| tree | 800bacf4c4d90d28f2b0cabee538115255508bdb /src/rt/rust_task_thread.cpp | |
| parent | 44d4889bc24a09259cf8a7fbf89ded78ab1e64bc (diff) | |
| download | rust-a53a08e1b980e5cf5f9707ef1d1f27b89ff7ed99.tar.gz rust-a53a08e1b980e5cf5f9707ef1d1f27b89ff7ed99.zip | |
rt: Don't allocate a C stack for tasks that already have one
Diffstat (limited to 'src/rt/rust_task_thread.cpp')
| -rw-r--r-- | src/rt/rust_task_thread.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/rt/rust_task_thread.cpp b/src/rt/rust_task_thread.cpp index fbcd164707f..dde16ad70bd 100644 --- a/src/rt/rust_task_thread.cpp +++ b/src/rt/rust_task_thread.cpp @@ -70,7 +70,7 @@ rust_task_thread::activate(rust_task *task) { task->ctx.next = &c_context; DLOG(this, task, "descheduling..."); lock.unlock(); - prepare_c_stack(); + prepare_c_stack(task); task->ctx.swap(c_context); unprepare_c_stack(); lock.lock(); @@ -367,9 +367,9 @@ rust_task_thread::exit() { // stack), because once we're on the Rust stack we won't have enough // room to do the allocation void -rust_task_thread::prepare_c_stack() { +rust_task_thread::prepare_c_stack(rust_task *task) { I(this, !extra_c_stack); - if (!cached_c_stack) { + if (!cached_c_stack && !task->have_c_stack()) { cached_c_stack = create_stack(kernel, C_STACK_SIZE); prepare_valgrind_stack(cached_c_stack); } |
