summaryrefslogtreecommitdiff
path: root/vm.c
diff options
context:
space:
mode:
authorYuta Saito <kateinoigakukun@gmail.com>2023-11-12 07:18:01 +0900
committerYuta Saito <kateinoigakukun@gmail.com>2023-11-13 19:17:16 +0900
commit50a5b76decf21f833da6c838e7acc7f991e47e00 (patch)
treea3c6aa29871902e44238ea244c7648a88f2ae2cb /vm.c
parentf1b95095d6635567cc5820b3eb40d9618faa73ed (diff)
[wasm] allocate Asyncify setjmp buffer in heap
`rb_jmpbuf_t` type is considerably large due to inline-allocated Asyncify buffer, and it leads to stack overflow even with small number of C-method call frames. This commit allocates the Asyncify buffer used by `rb_wasm_setjmp` in heap to mitigate the issue. This patch introduces a new type `rb_vm_tag_jmpbuf_t` to abstract the representation of a jump buffer, and init/deinit hook points to manage lifetime of the buffer. These changes are effectively NFC for non-wasm platforms.
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index 7f43484905..789e0956be 100644
--- a/vm.c
+++ b/vm.c
@@ -2462,7 +2462,7 @@ vm_exec(rb_execution_context_t *ec)
rb_wasm_try_catch_init(&try_catch, vm_exec_bottom_main, vm_exec_bottom_rescue, &ctx);
- rb_wasm_try_catch_loop_run(&try_catch, &_tag.buf);
+ rb_wasm_try_catch_loop_run(&try_catch, &RB_VM_TAG_JMPBUF_GET(_tag.buf));
result = ctx.result;
#else