about summary refs log tree commit diff
path: root/src/rt/rust_task.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/rt/rust_task.cpp')
-rw-r--r--src/rt/rust_task.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp
index 9c2d8824b34..5164f6ac181 100644
--- a/src/rt/rust_task.cpp
+++ b/src/rt/rust_task.cpp
@@ -191,6 +191,13 @@ void task_start_wrapper(spawn_args *a)
         task->free(env);
     }
 
+    task->die();
+
+    if (task->killed && !failed) {
+        LOG(task, task, "Task killed during termination");
+        failed = true;
+    }
+
     if (failed) {
 #ifndef __WIN32__
         task->conclude_failure();
@@ -198,7 +205,6 @@ void task_start_wrapper(spawn_args *a)
         A(task->sched, false, "Shouldn't happen");
 #endif
     } else {
-        task->die();
         task->lock.lock();
         task->notify_tasks_waiting_to_join();
         task->lock.unlock();
@@ -316,13 +322,13 @@ rust_task::fail() {
 #ifndef __WIN32__
     throw this;
 #else
+    die();
     conclude_failure();
 #endif
 }
 
 void
 rust_task::conclude_failure() {
-    die();
     // Unblock the task so it can unwind.
     unblock();
     fail_parent();