From 7396fbb0b5d2d9305ea4c5e8c1bda9bfa22ba100 Mon Sep 17 00:00:00 2001 From: ko1 Date: Fri, 21 Jun 2013 20:10:03 +0000 Subject: [PATCH] * gc.c (rgengc_rememberset_mark): call gc_mark_children() for remembered objects directly instead of pushing on the mark stack. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41549 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ gc.c | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 51ed16fc97..2a6143a7f4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Jun 22 05:08:03 2013 Koichi Sasada + + * gc.c (rgengc_rememberset_mark): call gc_mark_children() for + remembered objects directly instead of pushing on the mark stack. + Sat Jun 22 04:48:53 2013 Koichi Sasada * include/ruby/ruby.h (OBJ_WRITE): cast to (VALUE *) for second diff --git a/gc.c b/gc.c index bedb3f440e..87ac7d50d8 100644 --- a/gc.c +++ b/gc.c @@ -3720,10 +3720,11 @@ rgengc_rememberset_mark(rb_objspace_t *objspace) bitset = bits[j]; do { if (bitset & 1) { - gc_mark_ptr(objspace, (VALUE)p); - push_mark_stack(&objspace->mark_stack, (VALUE) p); rgengc_report(2, objspace, "rgengc_rememberset_mark: mark %p (%s)\n", p, obj_type_name((VALUE)p)); + gc_mark_ptr(objspace, (VALUE)p); + gc_mark_children(objspace, (VALUE) p); + if (!RVALUE_SHADY(p)) { rgengc_report(2, objspace, "rgengc_rememberset_mark: clear %p (%s)\n", p, obj_type_name((VALUE)p)); CLEAR_IN_BITMAP(bits, p);