summaryrefslogtreecommitdiffhomepage
path: root/src/proc.c
diff options
context:
space:
mode:
authordearblue <[email protected]>2021-07-17 20:43:19 +0900
committerdearblue <[email protected]>2021-07-17 20:43:19 +0900
commitde4523f793bb81bb52a80f55222b28e00c86b96c (patch)
tree4a43d796941eb9c0b220f4f2e0d8416bd1a24403 /src/proc.c
parentd4e22c2cec78945fa192917bfe44c6a0f979d7ee (diff)
downloadmruby-de4523f793bb81bb52a80f55222b28e00c86b96c.tar.gz
mruby-de4523f793bb81bb52a80f55222b28e00c86b96c.zip
Explicit write barrier for binding
Diffstat (limited to 'src/proc.c')
-rw-r--r--src/proc.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/proc.c b/src/proc.c
index 1d5a4aa76..6b3e19a6b 100644
--- a/src/proc.c
+++ b/src/proc.c
@@ -419,6 +419,11 @@ mrb_proc_merge_lvar(mrb_state *mrb, mrb_irep *irep, struct REnv *env, int num, c
memmove(destlv, lv, sizeof(mrb_sym) * num);
if (stack) {
memmove(destst, stack, sizeof(mrb_value) * num);
+ for (int i = 0; i < num; i++) {
+ if (!mrb_immediate_p(stack[i])) {
+ mrb_field_write_barrier(mrb, (struct RBasic*)env, (struct RBasic*)mrb_obj_ptr(stack[i]));
+ }
+ }
}
else {
for (int i = num; i > 0; i--, destst++) {