summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hawthorn <[email protected]>2025-06-15 01:18:22 -0700
committerJohn Hawthorn <[email protected]>2025-06-17 15:32:53 -0700
commita7dc515c1df34c9952401cfb17d52266b7cf5534 ()
tree15580052d0f014a68817bfa295ec3e5ca713e0f4
parente3ec101cc21613550ef87b7bd8432a69c7e639de (diff)
Fix too early writebarrier in tally_up
After returning from the callback in st_update is the point that the hash table may be resized, which could trigger a GC and mark the table being used for the tally. RUBY_GC_LIBRARY=wbcheck WBCHECK_VERIFY_AFTER_WB=1 ./miniruby -e '(0...100).map(&:to_s).tally'
Notes: Merged: https://.com/ruby/ruby/pull/13629
-rw-r--r--enum.c5
1 files changed, 3 insertions, 2 deletions
@@ -1215,14 +1215,15 @@ tally_up(st_data_t *group, st_data_t *value, st_data_t arg, int existing)
RB_OBJ_WRITTEN(hash, Qundef, tally);
}
*value = (st_data_t)tally;
- if (!SPECIAL_CONST_P(*group)) RB_OBJ_WRITTEN(hash, Qundef, *group);
return ST_CONTINUE;
}
static VALUE
rb_enum_tally_up(VALUE hash, VALUE group)
{
- rb_hash_stlike_update(hash, group, tally_up, (st_data_t)hash);
return hash;
}