|
| 1 | +From af4a44fbb3713b05b521b70e55f83cf6bc7f403b Mon Sep 17 00:00:00 2001 |
| 2 | +From: Yuta Saito < [email protected]> |
| 3 | +Date: Sun, 4 Sep 2022 14:34:24 +0000 |
| 4 | +Subject: [PATCH] [wasm] Allocate asyncify buffer on heap to save stack usage |
| 5 | + |
| 6 | +--- |
| 7 | + wasm/setjmp.c | 13 +++++++++++-- |
| 8 | + wasm/setjmp.h | 1 - |
| 9 | + 2 files changed, 11 insertions(+), 3 deletions(-) |
| 10 | + |
| 11 | +diff --git a/wasm/setjmp.c b/wasm/setjmp.c |
| 12 | +index 90420877a8..841fda22a3 100644 |
| 13 | +--- a/wasm/setjmp.c |
| 14 | ++++ b/wasm/setjmp.c |
| 15 | +@@ -66,8 +66,15 @@ enum rb_wasm_jmp_buf_state { |
| 16 | + void |
| 17 | + async_buf_init(struct __rb_wasm_asyncify_jmp_buf* buf) |
| 18 | + { |
| 19 | +- buf->top = &buf->buffer[0]; |
| 20 | +- buf->end = &buf->buffer[WASM_SETJMP_STACK_BUFFER_SIZE]; |
| 21 | ++ char *buffer = malloc(WASM_SETJMP_STACK_BUFFER_SIZE); |
| 22 | ++ buf->top = buffer; |
| 23 | ++ buf->end = buffer + WASM_SETJMP_STACK_BUFFER_SIZE; |
| 24 | ++} |
| 25 | ++ |
| 26 | ++inline static void |
| 27 | ++async_buf_deinit(struct __rb_wasm_asyncify_jmp_buf* buf) |
| 28 | ++{ |
| 29 | ++ free(buf->top); |
| 30 | + } |
| 31 | + |
| 32 | + // Global unwinding/rewinding jmpbuf state |
| 33 | +@@ -100,6 +107,8 @@ _rb_wasm_setjmp_internal(rb_wasm_jmp_buf *env) |
| 34 | + asyncify_stop_rewind(); |
| 35 | + RB_WASM_DEBUG_LOG(" JMP_BUF_STATE_RETURNING"); |
| 36 | + env->state = JMP_BUF_STATE_CAPTURED; |
| 37 | ++ async_buf_deinit(&env->longjmp_buf); |
| 38 | ++ async_buf_deinit(&env->setjmp_buf); |
| 39 | + _rb_wasm_active_jmpbuf = NULL; |
| 40 | + return env->payload; |
| 41 | + } |
| 42 | +diff --git a/wasm/setjmp.h b/wasm/setjmp.h |
| 43 | +index 65e35c03b3..ddfc742270 100644 |
| 44 | +--- a/wasm/setjmp.h |
| 45 | ++++ b/wasm/setjmp.h |
| 46 | +@@ -11,7 +11,6 @@ |
| 47 | + struct __rb_wasm_asyncify_jmp_buf { |
| 48 | + void* top; |
| 49 | + void* end; |
| 50 | +- char buffer[WASM_SETJMP_STACK_BUFFER_SIZE]; |
| 51 | + }; |
| 52 | + |
| 53 | + typedef struct { |
| 54 | +-- |
| 55 | +2.40.0 |
| 56 | + |
0 commit comments