summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2019-12-11 10:12:14 -0800
committerAaron Patterson <tenderlove@ruby-lang.org>2019-12-11 10:12:14 -0800
commit0f90630983db3257c544c698761a00456af81d85 (patch)
tree01fa84b5275c60844f6f816ca660a5b1b06884a1 /gc.c
parentcae657c32492a9b4e72b5e290c143e2c84d4c42d (diff)
Update method tables only if there is a class ext pointer
This makes reference updating look similar to marking, and may avoid dereferencing a wrong pointer.
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/gc.c b/gc.c
index 3a62f57e36..493a156a37 100644
--- a/gc.c
+++ b/gc.c
@@ -8179,14 +8179,12 @@ gc_update_object_references(rb_objspace_t *objspace, VALUE obj)
switch (BUILTIN_TYPE(obj)) {
case T_CLASS:
case T_MODULE:
- update_m_tbl(objspace, RCLASS_M_TBL(obj));
if (RCLASS_SUPER((VALUE)obj)) {
UPDATE_IF_MOVED(objspace, RCLASS(obj)->super);
}
if (!RCLASS_EXT(obj)) break;
- if (RCLASS_IV_TBL(obj)) {
- gc_update_tbl_refs(objspace, RCLASS_IV_TBL(obj));
- }
+ update_m_tbl(objspace, RCLASS_M_TBL(obj));
+ gc_update_tbl_refs(objspace, RCLASS_IV_TBL(obj));
update_class_ext(objspace, RCLASS_EXT(obj));
update_const_tbl(objspace, RCLASS_CONST_TBL(obj));
break;