about summary refs log tree commit diff
path: root/src/rt/rust_scheduler.cpp
diff options
context:
space:
mode:
authorBen Blum <bblum@andrew.cmu.edu>2012-07-20 18:47:47 -0400
committerBen Blum <bblum@andrew.cmu.edu>2012-07-20 19:23:19 -0400
commitaf7b7694659dd8988a1971118494edb684f85fbb (patch)
tree75b28f06c7c8715dd42384b259afae38ac69cde7 /src/rt/rust_scheduler.cpp
parent18c645a8839dd86d7f353d0fe98eaf27e246a525 (diff)
downloadrust-af7b7694659dd8988a1971118494edb684f85fbb.tar.gz
rust-af7b7694659dd8988a1971118494edb684f85fbb.zip
[3/4 for #2365, #2671] Fix exit/kill race with scheds during rust_kernel::fail
Diffstat (limited to 'src/rt/rust_scheduler.cpp')
-rw-r--r--src/rt/rust_scheduler.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/rt/rust_scheduler.cpp b/src/rt/rust_scheduler.cpp
index dc662b009ac..5dd1a261c0e 100644
--- a/src/rt/rust_scheduler.cpp
+++ b/src/rt/rust_scheduler.cpp
@@ -11,6 +11,7 @@ rust_scheduler::rust_scheduler(rust_kernel *kernel,
                                bool allow_exit,
                                bool killed,
                                rust_sched_launcher_factory *launchfac) :
+    ref_count(1),
     kernel(kernel),
     live_threads(num_threads),
     live_tasks(0),
@@ -22,8 +23,9 @@ rust_scheduler::rust_scheduler(rust_kernel *kernel,
     create_task_threads(launchfac, killed);
 }
 
-rust_scheduler::~rust_scheduler() {
+void rust_scheduler::delete_this() {
     destroy_task_threads();
+    delete this;
 }
 
 rust_sched_launcher *