From 6dc15cc8895b28800d5c187929d846ac4eb7cd3f Mon Sep 17 00:00:00 2001 From: ko1 Date: Sat, 29 Jul 2023 07:54:30 +0900 Subject: [PATCH] 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. --- gc.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/gc.c b/gc.c index f55fcb4fe1..d45bd0b789 100644 --- a/gc.c +++ b/gc.c @@ -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); } } }