diff options
Diffstat (limited to 'src/rt/rust_task.h')
| -rw-r--r-- | src/rt/rust_task.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/rt/rust_task.h b/src/rt/rust_task.h index 69a56e425de..4ad13472024 100644 --- a/src/rt/rust_task.h +++ b/src/rt/rust_task.h @@ -97,6 +97,12 @@ struct task_notification { task_result result; // task_result }; +extern "C" void +rust_task_fail(rust_task *task, + char const *expr, + char const *file, + size_t line); + struct rust_task : public kernel_owned<rust_task>, rust_cond { @@ -181,11 +187,19 @@ private: rust_cond *cond, const char* cond_name); bool must_fail_from_being_killed_unlocked(); + // Called by rust_task_fail to unwind on failure + void begin_failure(char const *expr, + char const *file, + size_t line); friend void task_start_wrapper(spawn_args *a); friend void cleanup_task(cleanup_args *a); friend void reset_stack_limit_on_c_stack(reset_args *a); friend void new_stack_slow(new_stack_args *a); + friend void rust_task_fail(rust_task *task, + char const *expr, + char const *file, + size_t line); public: @@ -231,6 +245,7 @@ public: // Fail self, assuming caller-on-stack is this task. void fail(); + void fail(char const *expr, char const *file, size_t line); void conclude_failure(); void fail_parent(); |
