diff options
author | Aaron Patterson <tenderlove@ruby-lang.org> | 2019-12-11 10:12:14 -0800 |
---|---|---|
committer | Aaron Patterson <tenderlove@ruby-lang.org> | 2019-12-11 10:12:14 -0800 |
commit | 0f90630983db3257c544c698761a00456af81d85 (patch) | |
tree | 01fa84b5275c60844f6f816ca660a5b1b06884a1 /gc.c | |
parent | cae657c32492a9b4e72b5e290c143e2c84d4c42d (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.c | 6 |
1 files changed, 2 insertions, 4 deletions
@@ -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; |