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

ruby-changes:17671

From: mame <ko1@a...>
Date: Thu, 4 Nov 2010 02:08:34 +0900 (JST)
Subject: [ruby-changes:17671] Ruby:r29680 (trunk): * cont.c (rb_fiber_resume): raise an "double resume" error when root

mame	2010-11-04 02:08:25 +0900 (Thu, 04 Nov 2010)

  New Revision: 29680

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29680

  Log:
    * cont.c (rb_fiber_resume): raise an "double resume" error when root
      fiber is going to be resumed.  [ruby-dev:42523]

  Modified files:
    trunk/ChangeLog
    trunk/cont.c
    trunk/test/ruby/test_fiber.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29679)
+++ ChangeLog	(revision 29680)
@@ -1,3 +1,8 @@
+Thu Nov  4 02:04:25 2010  Yusuke Endoh  <mame@t...>
+
+	* cont.c (rb_fiber_resume): raise an "double resume" error when root
+	  fiber is going to be resumed.  [ruby-dev:42523]
+
 Wed Nov  3 14:17:18 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* lib/ostruct.rb (OpenStruct#delete_field): also undefine
Index: cont.c
===================================================================
--- cont.c	(revision 29679)
+++ cont.c	(revision 29680)
@@ -1292,7 +1292,7 @@
     rb_fiber_t *fib;
     GetFiberPtr(fibval, fib);
 
-    if (fib->prev != Qnil) {
+    if (fib->prev != Qnil || fib->cont.type == ROOT_FIBER_CONTEXT) {
 	rb_raise(rb_eFiberError, "double resume");
     }
 
Index: test/ruby/test_fiber.rb
===================================================================
--- test/ruby/test_fiber.rb	(revision 29679)
+++ test/ruby/test_fiber.rb	(revision 29680)
@@ -189,5 +189,13 @@
       f1.transfer
     }, '[ruby-dev:40833]'
   end
+
+  def test_resume_root_fiber
+    assert_raise(FiberError) do
+      Thread.new do
+        Fiber.current.resume
+      end.join
+    end
+  end
 end
 

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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