mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Update to ruby/spec@83063a3
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62094 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									1e658d45e1
								
							
						
					
					
						commit
						3fa5bd38af
					
				
					 494 changed files with 4133 additions and 3109 deletions
				
			
		|  | @ -47,5 +47,42 @@ with_feature :fiber_library do | |||
|       fiber = Fiber.new { fiber.resume } | ||||
|       lambda { fiber.transfer }.should raise_error(FiberError) | ||||
|     end | ||||
| 
 | ||||
|     it "works if Fibers in different Threads each transfer to a Fiber in the same Thread" do | ||||
|       # This catches a bug where Fibers are running on a thread-pool | ||||
|       # and Fibers from a different Ruby Thread reuse the same native thread. | ||||
|       # Caching the Ruby Thread based on the native thread is not correct in that case, | ||||
|       # and the check for "fiber called across threads" in Fiber#transfer | ||||
|       # might be incorrect based on that. | ||||
|       2.times do | ||||
|         Thread.new do | ||||
|           io_fiber = Fiber.new do |calling_fiber| | ||||
|             calling_fiber.transfer | ||||
|           end | ||||
|           io_fiber.transfer(Fiber.current) | ||||
|           value = Object.new | ||||
|           io_fiber.transfer(value).should equal value | ||||
|         end.join | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     it "transfers control between a non-main thread's root fiber to a child fiber and back again" do | ||||
|       states = [] | ||||
|       thread = Thread.new do | ||||
|         f1 = Fiber.new do |f0| | ||||
|           states << 0 | ||||
|           value2 = f0.transfer(1) | ||||
|           states << value2 | ||||
|           3 | ||||
|         end | ||||
| 
 | ||||
|         value1 = f1.transfer(Fiber.current) | ||||
|         states << value1 | ||||
|         value3 = f1.transfer(2) | ||||
|         states << value3 | ||||
|       end | ||||
|       thread.join | ||||
|       states.should == [0, 1, 2, 3] | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 eregon
						eregon