diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index 4ce6e44879b..993a6b25cfb 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -244,6 +244,7 @@ rust_task::fail() { // See note in ::kill() regarding who should call this. DLOG(sched, task, "task %s @0x%" PRIxPTR " failing", name, this); backtrace(); + die(); // Unblock the task so it can unwind. unblock(); if (supervisor) { @@ -257,6 +258,8 @@ rust_task::fail() { if (NULL == supervisor && propagate_failure) sched->fail(); failed = true; + notify_tasks_waiting_to_join(); + yield(4); } void diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index 662dbe9429a..cf8537ad6d0 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -92,10 +92,7 @@ upcall_fail(rust_task *task, size_t line) { LOG_UPCALL_ENTRY(task); LOG_ERR(task, upcall, "upcall fail '%s', %s:%" PRIdPTR, expr, file, line); - task->die(); task->fail(); - task->notify_tasks_waiting_to_join(); - task->yield(4); } /**