summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-06-13 00:41:49 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-06-13 00:41:49 +0900
commit2ed7089546e8d4f41e32bd9959ef75c894c3e4fd (patch)
treeba363b758425e28f4b8c727920b1b117ed76d2f9
parentfe95f4401390a88b26e9c8cf6d20c217e577a17f (diff)
downloadmruby-2ed7089546e8d4f41e32bd9959ef75c894c3e4fd.tar.gz
mruby-2ed7089546e8d4f41e32bd9959ef75c894c3e4fd.zip
need to call write barrier on hash keys; ref #2375
-rw-r--r--src/hash.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/hash.c b/src/hash.c
index 997610953..1d449db3f 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -216,11 +216,12 @@ mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val)
if (r != 0) {
/* expand */
int ai = mrb_gc_arena_save(mrb);
- kh_key(h, k) = KEY(key);
+ key = kh_key(h, k) = KEY(key);
mrb_gc_arena_restore(mrb, ai);
kh_value(h, k).n = kh_size(h)-1;
}
+ mrb_field_write_barrier_value(mrb, (struct RBasic*)RHASH(hash), key);
mrb_field_write_barrier_value(mrb, (struct RBasic*)RHASH(hash), val);
return;
}