summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authortenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-04-19 06:21:55 +0000
committertenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2019-04-19 06:21:55 +0000
commit390ea5442089b8507a7d88c7d8756049bfcc0d4a (patch)
treeb82d8dca5891c6e7abd825dd5e6b8bda884e7b2e /gc.c
parent14626ed20a6677ab767e764c9edff83f94872f1a (diff)
Only mark the superclass if there is one
Some classes don't have a superclass, so we should check to see if it's there before marking. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gc.c b/gc.c
index 502c633e30..5ab6cd7dac 100644
--- a/gc.c
+++ b/gc.c
@@ -4757,7 +4757,9 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj)
case T_CLASS:
case T_MODULE:
mark_m_tbl(objspace, RCLASS_M_TBL(obj));
- gc_mark(objspace, RCLASS_SUPER((VALUE)obj));
+ if (RCLASS_SUPER((VALUE)obj)) {
+ gc_mark(objspace, RCLASS_SUPER((VALUE)obj));
+ }
if (!RCLASS_EXT(obj)) break;
mark_tbl(objspace, RCLASS_IV_TBL(obj));
mark_const_tbl(objspace, RCLASS_CONST_TBL(obj));
@@ -4767,7 +4769,9 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj)
if (FL_TEST(obj, RICLASS_IS_ORIGIN)) {
mark_m_tbl(objspace, RCLASS_M_TBL(obj));
}
- gc_mark(objspace, RCLASS_SUPER((VALUE)obj));
+ if (RCLASS_SUPER((VALUE)obj)) {
+ gc_mark(objspace, RCLASS_SUPER((VALUE)obj));
+ }
if (!RCLASS_EXT(obj)) break;
mark_m_tbl(objspace, RCLASS_CALLABLE_M_TBL(obj));
break;