diff options
| author | Ben Blum <bblum@andrew.cmu.edu> | 2012-07-20 18:14:04 -0400 |
|---|---|---|
| committer | Ben Blum <bblum@andrew.cmu.edu> | 2012-07-20 19:23:19 -0400 |
| commit | 18c645a8839dd86d7f353d0fe98eaf27e246a525 (patch) | |
| tree | c8a2090a04148c24d97cdd12de8446b26a901624 /src/rt/rust_sched_loop.cpp | |
| parent | 5bb4a12900969b3250c490a5e0682c658fe65ba8 (diff) | |
| download | rust-18c645a8839dd86d7f353d0fe98eaf27e246a525.tar.gz rust-18c645a8839dd86d7f353d0fe98eaf27e246a525.zip | |
[2/4 for #2365, #2671] Fix exit/kill race with tasks during rust_kernel::fail
Diffstat (limited to 'src/rt/rust_sched_loop.cpp')
| -rw-r--r-- | src/rt/rust_sched_loop.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/rt/rust_sched_loop.cpp b/src/rt/rust_sched_loop.cpp index aa2c62c630d..7c764921029 100644 --- a/src/rt/rust_sched_loop.cpp +++ b/src/rt/rust_sched_loop.cpp @@ -68,11 +68,15 @@ rust_sched_loop::kill_all_tasks() { killed = true; for (size_t i = 0; i < running_tasks.length(); i++) { - all_tasks.push_back(running_tasks[i]); + rust_task *t = running_tasks[i]; + t->ref(); + all_tasks.push_back(t); } for (size_t i = 0; i < blocked_tasks.length(); i++) { - all_tasks.push_back(blocked_tasks[i]); + rust_task *t = blocked_tasks[i]; + t->ref(); + all_tasks.push_back(t); } } @@ -80,6 +84,7 @@ rust_sched_loop::kill_all_tasks() { rust_task *task = all_tasks.back(); all_tasks.pop_back(); task->kill(); + task->deref(); } } |
