This reverts commit fa8ac91e95.

Previous behavior is intentional.
This commit is contained in:
Koichi Sasada 2019-10-24 15:03:26 +09:00
Родитель 65e8267938
Коммит 4c3e3b8028
3 изменённых файлов: 10 добавлений и 18 удалений

3
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);
}

Просмотреть файл

@ -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

Просмотреть файл

@ -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