ruby-changes:14304
From: mame <ko1@a...>
Date: Sun, 20 Dec 2009 23:21:04 +0900 (JST)
Subject: [ruby-changes:14304] Ruby:r26130 (trunk): * vm_eval.c (rb_iterate): remove SEGV (use the original patch).
mame 2009-12-20 23:20:46 +0900 (Sun, 20 Dec 2009) New Revision: 26130 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26130 Log: * vm_eval.c (rb_iterate): remove SEGV (use the original patch). [ruby-dev:39874] Modified files: trunk/ChangeLog trunk/vm_eval.c Index: ChangeLog =================================================================== --- ChangeLog (revision 26129) +++ ChangeLog (revision 26130) @@ -1,3 +1,8 @@ +Sun Dec 20 23:18:23 2009 Yusuke Endoh <mame@t...> + + * vm_eval.c (rb_iterate): remove SEGV (use the original patch). + [ruby-dev:39874] + Sun Dec 20 21:26:05 2009 Yusuke Endoh <mame@t...> * vm_eval.c (rb_iterate): pass current block when the argument bl_proc Index: vm_eval.c =================================================================== --- vm_eval.c (revision 26129) +++ vm_eval.c (revision 26130) @@ -820,24 +820,26 @@ { int state; volatile VALUE retval = Qnil; + NODE *node = NEW_IFUNC(bl_proc, data2); rb_thread_t *th = GET_THREAD(); rb_control_frame_t *volatile cfp = th->cfp; - rb_block_t *blockptr; - if (bl_proc) { - blockptr = RUBY_VM_GET_BLOCK_PTR_IN_CFP(th->cfp); - blockptr->iseq = (void *)NEW_IFUNC(bl_proc, data2); - blockptr->proc = 0; - } - else { - blockptr = GC_GUARDED_PTR_REF(th->cfp->lfp[0]); - } - *(rb_block_t *volatile *)&blockptr = blockptr; TH_PUSH_TAG(th); state = TH_EXEC_TAG(); if (state == 0) { iter_retry: - th->passed_block = *(rb_block_t *volatile *)&blockptr; + { + rb_block_t *blockptr; + if (bl_proc) { + blockptr = RUBY_VM_GET_BLOCK_PTR_IN_CFP(th->cfp); + blockptr->iseq = (void *)NEW_IFUNC(bl_proc, data2); + blockptr->proc = 0; + } + else { + blockptr = GC_GUARDED_PTR_REF(th->cfp->lfp[0]); + } + th->passed_block = blockptr; + } retval = (*it_proc) (data1); } else { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/