diff options
author | Alan Wu <[email protected]> | 2025-03-16 16:00:08 -0400 |
---|---|---|
committer | GitHub <[email protected]> | 2025-03-16 16:00:08 -0400 |
commit | 3e04f7b69fb56eac88b56f491b6a298fcc28b7f9 (patch) | |
tree | 6c76547860d811f11b1878a762c6b2166639b52d /range.c | |
parent | 70a9e5f6eb42cb1badba13d118f3c0d4106a3fe1 (diff) |
Only mark `cc->cme_` on valid imemo_callcache
We observed T_NONE on `cc->cme_` on a --repeat-count=50 run a compaction
test on CI:
http://ci.rvm.jp/results/trunk-repeat50@ruby-sp2-noble-docker/5654900
During reference updating for imemo_callcache in
rb_imemo_mark_and_move(), if `cc->klass` is not live, but `cc->_cme` is
live and moved, we go to the vm_cc_invalidate() path which
leaves `cc->_cme` not updated and stale. In the next marking run after
compaction, CME would've become a T_NONE.
So to quote the comment above "... cc is invalidated by
`vm_cc_invalidate()` and cc->cme is not be accessed."
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/12936
Merged-By: XrXr
Diffstat (limited to 'range.c')
0 files changed, 0 insertions, 0 deletions