From 8945143464de77ca43eba000f77c5d04a1cdabb8 Mon Sep 17 00:00:00 2001 From: Yuta Saito Date: Sun, 4 Sep 2022 14:34:24 +0000 Subject: [wasm] Allocate asyncify buffer on heap to save stack usage --- wasm/setjmp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'wasm/setjmp.c') diff --git a/wasm/setjmp.c b/wasm/setjmp.c index 90420877a8..c782987454 100644 --- a/wasm/setjmp.c +++ b/wasm/setjmp.c @@ -84,6 +84,7 @@ _rb_wasm_setjmp_internal(rb_wasm_jmp_buf *env) RB_WASM_DEBUG_LOG(" JMP_BUF_STATE_INITIALIZED"); env->state = JMP_BUF_STATE_CAPTURING; env->payload = 0; + env->longjmp_buf_ptr = NULL; _rb_wasm_active_jmpbuf = env; async_buf_init(&env->setjmp_buf); asyncify_start_unwind(&env->setjmp_buf); @@ -100,6 +101,7 @@ _rb_wasm_setjmp_internal(rb_wasm_jmp_buf *env) asyncify_stop_rewind(); RB_WASM_DEBUG_LOG(" JMP_BUF_STATE_RETURNING"); env->state = JMP_BUF_STATE_CAPTURED; + free(env->longjmp_buf_ptr); _rb_wasm_active_jmpbuf = NULL; return env->payload; } @@ -117,9 +119,10 @@ _rb_wasm_longjmp(rb_wasm_jmp_buf* env, int value) assert(value != 0); env->state = JMP_BUF_STATE_RETURNING; env->payload = value; + env->longjmp_buf_ptr = malloc(sizeof(struct __rb_wasm_asyncify_jmp_buf)); _rb_wasm_active_jmpbuf = env; - async_buf_init(&env->longjmp_buf); - asyncify_start_unwind(&env->longjmp_buf); + async_buf_init(env->longjmp_buf_ptr); + asyncify_start_unwind(env->longjmp_buf_ptr); } -- cgit v1.2.3