diff --git a/src/rt/rust_task.cpp b/src/rt/rust_task.cpp index e5c2078976093e1357b29dcae40a5d3ed0c77f4d..fcf0da29e45458c97bccb58e4cc95926012628fb 100644 --- a/src/rt/rust_task.cpp +++ b/src/rt/rust_task.cpp @@ -634,7 +634,7 @@ extern "C" CDECL void record_sp(void *limit); void * -rust_task::new_stack(size_t stk_sz, void *args_addr, size_t args_sz) { +rust_task::next_stack(size_t stk_sz, void *args_addr, size_t args_sz) { stk_seg *stk_seg = new_stk(thread, this, stk_sz + args_sz); A(thread, stk_seg->end - (uintptr_t)stk_seg->data >= stk_sz + args_sz, @@ -643,13 +643,17 @@ rust_task::new_stack(size_t stk_sz, void *args_addr, size_t args_sz) { // Push the function arguments to the new stack new_sp = align_down(new_sp - args_sz); memcpy(new_sp, args_addr, args_sz); + A(thread, rust_task_thread::get_task() == this, + "Recording the stack limit for the wrong thread"); record_stack_limit(); return new_sp; } void -rust_task::del_stack() { +rust_task::prev_stack() { del_stk(this, stk); + A(thread, rust_task_thread::get_task() == this, + "Recording the stack limit for the wrong thread"); record_stack_limit(); } diff --git a/src/rt/rust_task.h b/src/rt/rust_task.h index 397e59a5f5410b8145533018a3591280907d8492..f78a0ca580582a46be23287a492ce57350624237 100644 --- a/src/rt/rust_task.h +++ b/src/rt/rust_task.h @@ -167,8 +167,8 @@ public: void notify(bool success); - void *new_stack(size_t stk_sz, void *args_addr, size_t args_sz); - void del_stack(); + void *next_stack(size_t stk_sz, void *args_addr, size_t args_sz); + void prev_stack(); void record_stack_limit(); void reset_stack_limit(); bool on_rust_stack(); diff --git a/src/rt/rust_upcall.cpp b/src/rt/rust_upcall.cpp index 6c666fb8189bbc20cbcc3522cb72a303c9f8b29c..ea51ecc71c01d0a623315608ec3facd85ebfb926 100644 --- a/src/rt/rust_upcall.cpp +++ b/src/rt/rust_upcall.cpp @@ -660,9 +660,9 @@ struct s_new_stack_args { extern "C" CDECL void upcall_s_new_stack(struct s_new_stack_args *args) { rust_task *task = rust_task_thread::get_task(); - args->result = task->new_stack(args->stk_sz, - args->args_addr, - args->args_sz); + args->result = task->next_stack(args->stk_sz, + args->args_addr, + args->args_sz); } extern "C" CDECL void * @@ -675,7 +675,7 @@ upcall_new_stack(size_t stk_sz, void *args_addr, size_t args_sz) { extern "C" CDECL void upcall_s_del_stack() { rust_task *task = rust_task_thread::get_task(); - task->del_stack(); + task->prev_stack(); } extern "C" CDECL void