summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-21 20:10:03 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-06-21 20:10:03 +0000
commit7396fbb0b5d2d9305ea4c5e8c1bda9bfa22ba100 (patch)
tree0a215ba5018198f0829f7d11f39cd0a40bc53f99 /gc.c
parent4223f00713bec8721c031e50bf8a6d23e806f3e9 (diff)
* 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
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c5
1 files changed, 3 insertions, 2 deletions
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);