From 18c645a8839dd86d7f353d0fe98eaf27e246a525 Mon Sep 17 00:00:00 2001 From: Ben Blum Date: Fri, 20 Jul 2012 18:14:04 -0400 Subject: [PATCH] [2/4 for #2365, #2671] Fix exit/kill race with tasks during rust_kernel::fail --- src/rt/rust_sched_loop.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/rt/rust_sched_loop.cpp b/src/rt/rust_sched_loop.cpp index aa2c62c630d9a..7c76492102944 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(); } }