diff options
author | ko1 <ko1@atdot.net> | 2023-07-29 07:54:30 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2023-07-29 09:06:14 +0900 |
commit | 6dc15cc8895b28800d5c187929d846ac4eb7cd3f (patch) | |
tree | b5b4cb97748f87a15edaff880fa880fd4702c60c /gc.c | |
parent | bcf823fddbe38e0503805a7ba6ded53c1bc1e19d (diff) |
do not clear cme but invalidate cc
To invalidate a cc, we need to clear cc->klass by `vm_cc_invalidate()`.
I hope this patch fix the CI failures.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/8134
Diffstat (limited to 'gc.c')
-rw-r--r-- | gc.c | 9 |
1 files changed, 3 insertions, 6 deletions
@@ -10131,15 +10131,12 @@ gc_ref_update_imemo(rb_objspace_t *objspace, VALUE obj) if (cc->klass) { UPDATE_IF_MOVED(objspace, cc->klass); if (!is_live_object(objspace, cc->klass)) { - *((VALUE *)(&cc->klass)) = (VALUE)0; + vm_cc_invalidate(cc); } - - // cc->cme_ is available if cc->klass is given - - if (cc->cme_) { + else if (cc->cme_) { // cc->cme_ is available if cc->klass is given TYPED_UPDATE_IF_MOVED(objspace, struct rb_callable_method_entry_struct *, cc->cme_); if (!is_live_object(objspace, (VALUE)cc->cme_)) { - *((struct rb_callable_method_entry_struct **)(&cc->cme_)) = (struct rb_callable_method_entry_struct *)0; + vm_cc_invalidate(cc); } } } |