[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]