1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55663 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
ko1 2016-07-13 07:08:32 +00:00
parent d42e547ab1
commit d7eb7bbcce
3 changed files with 18 additions and 1 deletions

View file

@ -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> 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 * math.c (_USE_MATH_DEFINES): it must be set before including internal.h

2
gc.c
View file

@ -4694,7 +4694,7 @@ gc_mark_roots(rb_objspace_t *objspace, const char **categoryp)
MARK_CHECKPOINT("vm"); MARK_CHECKPOINT("vm");
SET_STACK_END; SET_STACK_END;
rb_vm_mark(th->vm); 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_CHECKPOINT("finalizers");
mark_tbl(objspace, finalizer_table); mark_tbl(objspace, finalizer_table);

View file

@ -390,4 +390,11 @@ class TestGc < Test::Unit::TestCase
GC.enable unless disabled GC.enable unless disabled
end end
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 end