Project

General

Profile

Bug #6117

Updated by ko1 (Koichi Sasada) about 5 years ago

=begin 
 Consider the following code:  

 ```ruby 
    

   require 'fiber' 

   def foo 
     order = [] 
     main_fiber = Fiber.current 
     a = Fiber.new do  
       order << 2 
       x = Fiber.new do 
         order << 4 
         main_fiber.transfer 
         order << 6 
       end 
       order << 3 
       x.resume 
       order << 7 
     end 

     order << 1 
     a.transfer 
     order << 5 
     a.transfer 
     order << 8 
   end 
 ``` 

 It produces output: 

 ``` 
   [1, 2, 3, 4, 5, 7, 8] 
 ``` 

 Note: the missing 6. I'd expect either the array to be 1-8 OR for an exception to be raised after 5 when the main fiber attempts to transfer into a again. 

 Either it shouldn't be possible to transfer into a Fiber that is blocked resuming another Fiber, OR it should automatically resume the sub-Fiber. 
 =end 

Back