diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-06-13 00:41:49 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-06-13 00:41:49 +0900 |
| commit | 2ed7089546e8d4f41e32bd9959ef75c894c3e4fd (patch) | |
| tree | ba363b758425e28f4b8c727920b1b117ed76d2f9 /src/hash.c | |
| parent | fe95f4401390a88b26e9c8cf6d20c217e577a17f (diff) | |
| download | mruby-2ed7089546e8d4f41e32bd9959ef75c894c3e4fd.tar.gz mruby-2ed7089546e8d4f41e32bd9959ef75c894c3e4fd.zip | |
need to call write barrier on hash keys; ref #2375
Diffstat (limited to 'src/hash.c')
| -rw-r--r-- | src/hash.c | 3 |
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; } |
