Ruby fiber: resuming transferred fibers

I am trying to understand the behavior of the following code snippet. My specific focus is on the Fiber#transfer method.

require 'fiber'

fiber2 = nil

fiber1 = Fiber.new do

puts "In Fiber 1" # 3

fiber2.transfer # 4

end

fiber2 = Fiber.new do

puts "In Fiber 2" # 1

fiber1.transfer # 2

puts "In Fiber 2 again" # 5

Fiber.yield # 6

puts "Fiber 2 resumed" # 10

end

fiber3 = Fiber.new do

puts "In Fiber 3" # 8

end

fiber2.resume # 0

fiber3.resume # 7

fiber2.resume # 9

I have numbered the lines of code with the expected serial order of execution on the right. Once fiber3.resume returns and I call fiber2.resume, I expect the execution to continue inside fiber2 at the line marked # 10. Instead, I get the following error: