aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2019-10-24 15:03:26 +0900
committerKoichi Sasada <ko1@atdot.net>2019-10-24 16:46:21 +0900
commit4c3e3b8028ca76fcaedc0e40d9ac678e3ac79ee9 (patch)
treea09193934fde2f72c3760a61de6b276c218c0a50
parent65e8267938a260620bbfe1c1d97e67dde8c31f6c (diff)
downloadruby-4c3e3b8028ca76fcaedc0e40d9ac678e3ac79ee9.tar.gz
Revert "Fix Fiber#transfer"
This reverts commit fa8ac91e957a076f6df1adaecad7896817138009. Previous behavior is intentional.
-rw-r--r--cont.c3
-rw-r--r--spec/ruby/library/fiber/transfer_spec.rb15
-rw-r--r--test/ruby/test_fiber.rb10
3 files changed, 10 insertions, 18 deletions
diff --git a/cont.c b/cont.c
index 8e1dc6db87..61f42b386f 100644
--- a/cont.c
+++ b/cont.c
@@ -2226,8 +2226,7 @@ static VALUE
rb_fiber_m_transfer(int argc, VALUE *argv, VALUE fiber_value)
{
rb_fiber_t *fiber = fiber_ptr(fiber_value);
- fiber_current()->transferred = 1;
- fiber->transferred = 0;
+ fiber->transferred = 1;
return fiber_switch(fiber, argc, argv, 0, PASS_KW_SPLAT);
}
diff --git a/spec/ruby/library/fiber/transfer_spec.rb b/spec/ruby/library/fiber/transfer_spec.rb
index fa094a022d..d13053666c 100644
--- a/spec/ruby/library/fiber/transfer_spec.rb
+++ b/spec/ruby/library/fiber/transfer_spec.rb
@@ -42,18 +42,9 @@ describe "Fiber#transfer" do
fiber2.transfer.should == [:fiber2_start, :fiber1, :fiber2_end]
end
- ruby_version_is ''...'2.7' do
- it "raises a FiberError when transferring to a Fiber which resumes itself" do
- fiber = Fiber.new { fiber.resume }
- -> { fiber.transfer }.should raise_error(FiberError)
- end
- end
-
- ruby_version_is '2.7' do
- it "allows transferring to a Fiber which resumes itself" do
- fiber = Fiber.new { fiber.resume 1 }
- fiber.transfer.should == 1
- end
+ it "raises a FiberError when transferring to a Fiber which resumes itself" do
+ fiber = Fiber.new { fiber.resume }
+ -> { fiber.transfer }.should raise_error(FiberError)
end
it "works if Fibers in different Threads each transfer to a Fiber in the same Thread" do
diff --git a/test/ruby/test_fiber.rb b/test/ruby/test_fiber.rb
index aa47aaf9be..2d7cbc8a9e 100644
--- a/test/ruby/test_fiber.rb
+++ b/test/ruby/test_fiber.rb
@@ -222,8 +222,8 @@ class TestFiber < Test::Unit::TestCase
end
def test_resume_self
- f = Fiber.new {f.resume 1}
- assert_equal(1, f.transfer)
+ f = Fiber.new {f.resume}
+ assert_raise(FiberError, '[ruby-core:23651]') {f.transfer}
end
def test_fiber_transfer_segv
@@ -289,12 +289,14 @@ class TestFiber < Test::Unit::TestCase
assert_raise(FiberError){
g=nil
f=Fiber.new{
- g.transfer
+ g.resume
+ g.resume
}
g=Fiber.new{
f.resume
+ f.resume
}
- f.resume
+ f.transfer
}
end