summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-binding-core/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-07-19 07:40:22 +0900
committerGitHub <[email protected]>2021-07-19 07:40:22 +0900
commited2a6a160eb546852adfe3661bb4face9d07820b (patch)
treea920c66e900a25d1aed2ef8334e29e21cd0349ba /mrbgems/mruby-binding-core/src
parent71c778dbfcff017b64f36a777fe19ca37fa0b83d (diff)
parentde4523f793bb81bb52a80f55222b28e00c86b96c (diff)
downloadmruby-ed2a6a160eb546852adfe3661bb4face9d07820b.tar.gz
mruby-ed2a6a160eb546852adfe3661bb4face9d07820b.zip
Merge pull request #5511 from dearblue/binding.3
Explicit write barrier for binding
Diffstat (limited to 'mrbgems/mruby-binding-core/src')
-rw-r--r--mrbgems/mruby-binding-core/src/binding-core.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/mrbgems/mruby-binding-core/src/binding-core.c b/mrbgems/mruby-binding-core/src/binding-core.c
index 7b70cfb78..5e104e720 100644
--- a/mrbgems/mruby-binding-core/src/binding-core.c
+++ b/mrbgems/mruby-binding-core/src/binding-core.c
@@ -151,6 +151,9 @@ binding_local_variable_set(mrb_state *mrb, mrb_value self)
mrb_value *e = binding_local_variable_search(mrb, proc, env, varname);
if (e) {
*e = obj;
+ if (!mrb_immediate_p(obj)) {
+ mrb_field_write_barrier(mrb, (struct RBasic*)env, (struct RBasic*)mrb_obj_ptr(obj));
+ }
}
else {
mrb_proc_merge_lvar(mrb, (mrb_irep*)proc->body.irep, env, 1, &varname, &obj);