diff options
author | Yuta Saito <kateinoigakukun@gmail.com> | 2022-09-04 14:34:24 +0000 |
---|---|---|
committer | Yuta Saito <kateinoigakukun@gmail.com> | 2023-05-16 03:52:59 +0900 |
commit | 8945143464de77ca43eba000f77c5d04a1cdabb8 (patch) | |
tree | c37218b4dd1b8b422d1be60fe7a19156e1f16921 /wasm/setjmp.c | |
parent | ab7bb38aca0d2b5c2b81142a8e67fbff0f1a4a8a (diff) |
[wasm] Allocate asyncify buffer on heap to save stack usage
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7818
Diffstat (limited to 'wasm/setjmp.c')
-rw-r--r-- | wasm/setjmp.c | 7 |
1 files changed, 5 insertions, 2 deletions
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); } |