-
Alan Wu authored
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."
Alan Wu authoredWe 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."
Loading