Skip to content
  • Alan Wu's avatar
    3e04f7b6
    Only mark `cc->cme_` on valid imemo_callcache · 3e04f7b6
    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."
    3e04f7b6
    Only mark `cc->cme_` on valid imemo_callcache
    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."
Loading