diff options
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); } |