ruby-changes:18409
From: wanabe <ko1@a...>
Date: Thu, 30 Dec 2010 23:17:39 +0900 (JST)
Subject: [ruby-changes:18409] Ruby:r30432 (trunk): * vm.c (vm_define_method): guard iseq from GC while method definition.
wanabe 2010-12-30 23:17:32 +0900 (Thu, 30 Dec 2010) New Revision: 30432 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30432 Log: * vm.c (vm_define_method): guard iseq from GC while method definition. [ruby-dev:42832] Modified files: trunk/ChangeLog trunk/test/ruby/test_gc.rb trunk/vm.c Index: ChangeLog =================================================================== --- ChangeLog (revision 30431) +++ ChangeLog (revision 30432) @@ -1,3 +1,8 @@ +Thu Dec 30 23:09:47 2010 wanabe <s.wanabe@g...> + + * vm.c (vm_define_method): guard iseq from GC while method definition. + [ruby-dev:42832] + Thu Dec 30 20:18:32 2010 KOSAKI Motohiro <kosaki.motohiro@g...> * win32/Makefile.sub: ditto. Index: vm.c =================================================================== --- vm.c (revision 30431) +++ vm.c (revision 30432) @@ -1837,8 +1837,9 @@ GetISeqPtr(iseqval, miseq); if (miseq->klass) { - iseqval = rb_iseq_clone(iseqval, 0); - GetISeqPtr(iseqval, miseq); + iseqval = rb_iseq_clone(iseqval, 0); + RB_GC_GUARD(iseqval); + GetISeqPtr(iseqval, miseq); } if (NIL_P(klass)) { Index: test/ruby/test_gc.rb =================================================================== --- test/ruby/test_gc.rb (revision 30431) +++ test/ruby/test_gc.rb (revision 30432) @@ -63,4 +63,19 @@ assert_equal(false, res.empty?) assert_kind_of(Integer, res[:count]) end + + def test_singleton_method + prev_stress = GC.stress + assert_nothing_raised("[ruby-dev:42832]") do + GC.stress = true + 10.times do + obj = Object.new + def obj.foo() end + def obj.bar() raise "obj.foo is called, but this is obj.bar" end + obj.foo + end + end + ensure + GC.stress = prev_stress + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/