diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-04-05 11:53:20 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-04-05 11:53:20 +0900 |
| commit | 74712c73ac9471fd388d76b0f12229ec428d5146 (patch) | |
| tree | 1abc9e552fa4cf563711e4fd3c0a7c3442d27b7e /mrbgems/mruby-struct/src | |
| parent | bdeb803f04b6bd919202b078a52df7abb0af73ee (diff) | |
| download | mruby-74712c73ac9471fd388d76b0f12229ec428d5146.tar.gz mruby-74712c73ac9471fd388d76b0f12229ec428d5146.zip | |
Need to insert write barriers in struct updates; fix #3547
Diffstat (limited to 'mrbgems/mruby-struct/src')
| -rw-r--r-- | mrbgems/mruby-struct/src/struct.c | 2 |
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; } |
