about summary refs log tree commit diff
path: root/src/libstd/rt/task.rs
diff options
context:
space:
mode:
authorBen Blum <bblum@andrew.cmu.edu>2013-07-31 19:48:38 -0400
committerBen Blum <bblum@andrew.cmu.edu>2013-08-01 17:07:31 -0400
commit963d37e821590b470f7a1fc9cfcda5a5ceceeee4 (patch)
tree0f3fb8984b6e0dc76dad4d64014e8aff2eebb348 /src/libstd/rt/task.rs
parentaeaed77301397c6ab0c4f5413dbd4b7f0d5b5c9a (diff)
downloadrust-963d37e821590b470f7a1fc9cfcda5a5ceceeee4.tar.gz
rust-963d37e821590b470f7a1fc9cfcda5a5ceceeee4.zip
Temporary workaround to prevent taskgroup cleanup code from failing without an exception handler.
Diffstat (limited to 'src/libstd/rt/task.rs')
-rw-r--r--src/libstd/rt/task.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/libstd/rt/task.rs b/src/libstd/rt/task.rs
index c1b799796d1..f7f1b10e58c 100644
--- a/src/libstd/rt/task.rs
+++ b/src/libstd/rt/task.rs
@@ -129,8 +129,13 @@ impl Task {
         }
 
         self.unwinder.try(f);
-        { let _ = self.taskgroup.take(); }
-        self.death.collect_failure(!self.unwinder.unwinding);
+        // FIXME(#7544): We pass the taskgroup into death so that it can be
+        // dropped while the unkillable counter is set. This should not be
+        // necessary except for an extraneous clone() in task/spawn.rs that
+        // causes a killhandle to get dropped, which mustn't receive a kill
+        // signal since we're outside of the unwinder's try() scope.
+        // { let _ = self.taskgroup.take(); }
+        self.death.collect_failure(!self.unwinder.unwinding, self.taskgroup.take());
         self.destroy();
     }