summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-struct/src/struct.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-04-05 11:53:20 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-04-05 11:53:20 +0900
commit74712c73ac9471fd388d76b0f12229ec428d5146 (patch)
tree1abc9e552fa4cf563711e4fd3c0a7c3442d27b7e /mrbgems/mruby-struct/src/struct.c
parentbdeb803f04b6bd919202b078a52df7abb0af73ee (diff)
downloadmruby-74712c73ac9471fd388d76b0f12229ec428d5146.tar.gz
mruby-74712c73ac9471fd388d76b0f12229ec428d5146.zip
Need to insert write barriers in struct updates; fix #3547
Diffstat (limited to 'mrbgems/mruby-struct/src/struct.c')
-rw-r--r--mrbgems/mruby-struct/src/struct.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/mrbgems/mruby-struct/src/struct.c b/mrbgems/mruby-struct/src/struct.c
index 93bd1e2b2..de9785df7 100644
--- a/mrbgems/mruby-struct/src/struct.c
+++ b/mrbgems/mruby-struct/src/struct.c
@@ -449,6 +449,7 @@ mrb_struct_aset_sym(mrb_state *mrb, mrb_value s, mrb_sym id, mrb_value val)
for (i=0; i<len; i++) {
if (mrb_symbol(ptr_members[i]) == id) {
ptr[i] = val;
+ mrb_write_barrier(mrb, (struct RBasic*)mrb_ptr(s));
return val;
}
}
@@ -511,6 +512,7 @@ mrb_struct_aset(mrb_state *mrb, mrb_value s)
"offset %S too large for struct(size:%S)",
mrb_fixnum_value(i), mrb_fixnum_value(RSTRUCT_LEN(s)));
}
+ mrb_write_barrier(mrb, (struct RBasic*)mrb_ptr(s));
return RSTRUCT_PTR(s)[i] = val;
}