void rust_task::fail() { // See note in ::kill() regarding who should call this. DLOG(thread, task, "task %s @0x%" PRIxPTR " failing", name, this); backtrace(); unwinding = true; #ifndef __WIN32__ throw this; #else die(); conclude_failure(); // FIXME: Need unwinding on windows. This will end up aborting thread->fail(); #endif }
// Called only by rust_task_fail void rust_task::begin_failure(char const *expr, char const *file, size_t line) { if (expr) { LOG_ERR(this, task, "task failed at '%s', %s:%" PRIdPTR, expr, file, line); } DLOG(sched_loop, task, "task %s @0x%" PRIxPTR " failing", name, this); backtrace(); unwinding = true; #ifndef __WIN32__ throw this; #else die(); conclude_failure(); // FIXME (#908): Need unwinding on windows. This will end up aborting sched_loop->fail(); #endif }