diff options
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | gc.c | 2 | ||||
-rw-r--r-- | test/ruby/test_gc.rb | 7 |
3 files changed, 18 insertions, 1 deletions
@@ -1,3 +1,13 @@ +Wed Jul 13 16:08:08 2016 Koichi Sasada <ko1@atdot.net> + + * gc.c (gc_mark_roots): should mark the VM object itself to mark + singleton class of the VM object. + Before this patch, we only set mark bit for the VM object and + invoke mark function separately. + [Bug #12583] + + * test/ruby/test_gc.rb: add a test. + Wed Jul 13 15:59:59 2016 NAKAMURA Usaku <usa@ruby-lang.org> * math.c (_USE_MATH_DEFINES): it must be set before including internal.h @@ -4694,7 +4694,7 @@ gc_mark_roots(rb_objspace_t *objspace, const char **categoryp) MARK_CHECKPOINT("vm"); SET_STACK_END; rb_vm_mark(th->vm); - if (th->vm->self) gc_mark_set(objspace, th->vm->self); + if (th->vm->self) gc_mark(objspace, th->vm->self); MARK_CHECKPOINT("finalizers"); mark_tbl(objspace, finalizer_table); diff --git a/test/ruby/test_gc.rb b/test/ruby/test_gc.rb index d915ae25d7..a5fd2897a2 100644 --- a/test/ruby/test_gc.rb +++ b/test/ruby/test_gc.rb @@ -390,4 +390,11 @@ class TestGc < Test::Unit::TestCase GC.enable unless disabled end end + + def test_vm_object + assert_normal_exit <<-'end', '[Bug #12583]' + ObjectSpace.each_object{|o| o.singleton_class rescue 0} + ObjectSpace.each_object{|o| case o when Module then o.instance_methods end} + end + end end |