From 5c6790519b12afae688c87ae3f55ee5eec1a6dcc Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Mon, 15 Aug 2011 11:34:12 -0700 Subject: Reducing the chances for race conditions in join. --- src/rt/rust_kernel.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/rt/rust_kernel.cpp') diff --git a/src/rt/rust_kernel.cpp b/src/rt/rust_kernel.cpp index c11a5b69b73..ceddcf5b1c9 100644 --- a/src/rt/rust_kernel.cpp +++ b/src/rt/rust_kernel.cpp @@ -160,7 +160,17 @@ rust_kernel::get_task_by_id(rust_task_id id) { rust_task *task = NULL; // get leaves task unchanged if not found. task_table.get(id, &task); - if(task) task->ref(); + if(task) { + if(task->get_ref_count() == 0) { + // this means the destructor is running, since the destructor + // grabs the kernel lock to unregister the task. Pretend this + // doesn't actually exist. + return NULL; + } + else { + task->ref(); + } + } return task; } -- cgit 1.4.1-3-g733a5