summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorko1 <ko1@atdot.net>2023-07-29 07:54:30 +0900
committerKoichi Sasada <ko1@atdot.net>2023-07-29 09:06:14 +0900
commit6dc15cc8895b28800d5c187929d846ac4eb7cd3f (patch)
treeb5b4cb97748f87a15edaff880fa880fd4702c60c /gc.c
parentbcf823fddbe38e0503805a7ba6ded53c1bc1e19d (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.c9
1 files 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);
}
}
}