Skip to content

Commit 752aa29

Browse files
Apply heap-allocated asyncify buffer
1 parent 9aef33e commit 752aa29

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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

Comments
 (0)