diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-03-02 15:14:52 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-03-02 15:21:59 -0800 |
| commit | 14306756b4a4f5f83043e3c2f91169a151fd54f5 (patch) | |
| tree | f27078ef26a89eb22fc1fc6841689b20eb20a777 /src/rt/rust_task.cpp | |
| parent | 9ec94f714ab4d7175451095dc7438e6a9ee2cc0c (diff) | |
| download | rust-14306756b4a4f5f83043e3c2f91169a151fd54f5.tar.gz rust-14306756b4a4f5f83043e3c2f91169a151fd54f5.zip | |
rt: Always delete task stacks on the task thread
There's not a real race here, but it makes helgrind happy and is arguably less prone to future errrors.
Diffstat (limited to 'src/rt/rust_task.cpp')
| -rw-r--r-- | src/rt/rust_task.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index c6d1ce4f100..106190d76f8 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -121,13 +121,6 @@ rust_task::delete_this() I(thread, ref_count == 0); // || // (ref_count == 1 && this == sched->root_task)); - // Delete all the stacks. There may be more than one if the task failed - // and no landing pads stopped to clean up. - // FIXME: We should do this when the task exits, not in the destructor - while (stk != NULL) { - del_stack(); - } - thread->release_task(this); } @@ -726,6 +719,16 @@ rust_task::check_stack_canary() { } void +rust_task::delete_all_stacks() { + I(thread, !on_rust_stack()); + // Delete all the stacks. There may be more than one if the task failed + // and no landing pads stopped to clean up. + while (stk != NULL) { + del_stack(); + } +} + +void rust_task::config_notify(chan_handle chan) { notify_enabled = true; notify_chan = chan; |
