Project

General

Profile

Actions

Bug #4019

closed

root fiber allows double resume

Added by mame (Yusuke Endoh) over 14 years ago. Updated about 14 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.3dev (2010-11-03 trunk 29679) [i686-linux]
Backport:
[ruby-dev:42523]

Description

=begin
遠藤です。

Fiber は自分自身を (直接または間接的に) resume しようとすると
double resume という例外を投げますが

require "fiber"
Fiber.new do
Fiber.current.resume #=> double resume (FiberError)
end

root fiber の場合は 1 回目だけ何も言いません。

require "fiber"
Fiber.current.resume #=> nil
Fiber.current.resume #=> double resume (FiberError)

diff --git a/cont.c b/cont.c
index b0b3f41..b0defca 100644
--- a/cont.c
+++ b/cont.c
@@ -1292,7 +1292,7 @@ rb_fiber_resume(VALUE fibval, int argc, VALUE *argv)
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");
    }

diff --git a/test/ruby/test_fiber.rb b/test/ruby/test_fiber.rb
index edfe55a..ec64f98 100644
--- a/test/ruby/test_fiber.rb
+++ b/test/ruby/test_fiber.rb
@@ -189,5 +189,13 @@ class TestFiber < Test::Unit::TestCase
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

--
Yusuke Endoh
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0