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 #1

Updated by ko1 (Koichi Sasada) over 14 years ago

=begin
 ささだです。

(2010/11/03 16:00), Yusuke Endoh wrote:

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

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

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

 ご指摘ありがとうございます。コミットもお願いします。

--
// SASADA Koichi at atdot dot net

=end

Actions #2

Updated by mame (Yusuke Endoh) over 14 years ago

  • Status changed from Open to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r29680.
Yusuke, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0