From 8457bea9ab5394cb43f4d5019ccb8836675366ad Mon Sep 17 00:00:00 2001 From: ngoto Date: Sun, 18 Dec 2011 09:58:31 +0000 Subject: [PATCH] * vm.c (vm_define_method): improve guard of iseq from GC. Fix failure or segmentation fault in test_singleton_method(TestGc) on sparc Solaris10 compiled with Oracle Solaris Studio 12.2. [Bug #5762] [ruby-dev:45000] [Bug #4178] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34071 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ vm.c | 3 +-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 01be941bba..8dd6907ed4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sun Dec 18 18:52:37 2011 Naohisa Goto + + * vm.c (vm_define_method): improve guard of iseq from GC. Fix + failure or segmentation fault in test_singleton_method(TestGc) + on sparc Solaris10 compiled with Oracle Solaris Studio 12.2. + [Bug #5762] [ruby-dev:45000] [Bug #4178] + Sun Dec 18 14:34:31 2011 Nobuyoshi Nakada * ext/bigdecimal/bigdecimal.c (Init_bigdecimal): does not follow diff --git a/vm.c b/vm.c index e04a44b696..67ca4393a5 100644 --- a/vm.c +++ b/vm.c @@ -1912,8 +1912,7 @@ vm_define_method(rb_thread_t *th, VALUE obj, ID id, VALUE iseqval, GetISeqPtr(iseqval, miseq); if (miseq->klass) { - iseqval = rb_iseq_clone(iseqval, 0); - RB_GC_GUARD(iseqval); + RB_GC_GUARD(iseqval) = rb_iseq_clone(iseqval, 0); GetISeqPtr(iseqval, miseq); }