From de4523f793bb81bb52a80f55222b28e00c86b96c Mon Sep 17 00:00:00 2001 From: dearblue Date: Sat, 17 Jul 2021 20:43:19 +0900 Subject: Explicit write barrier for binding --- src/proc.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src') 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++) { -- cgit v1.2.3