mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 db95cb49af
			
		
	
	
		db95cb49af
		
	
	
	
	
		
			
			another thread close IO object which current thread is blocking with. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11796 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			31 lines
		
	
	
	
		
			683 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
	
		
			683 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'test/unit'
 | |
| begin
 | |
|   require 'io/nonblock'
 | |
| rescue LoadError
 | |
| end
 | |
| 
 | |
| Thread.abort_on_exception = true
 | |
| class TestIONonblock < Test::Unit::TestCase
 | |
|   def test_flush                # [ruby-dev:24985]
 | |
|     flunk "IO#close can't interrupt IO blocking on YARV"
 | |
|     r,w = IO.pipe
 | |
|     w.nonblock = true
 | |
|     w.sync = false
 | |
|     w << "b"
 | |
|     w.flush
 | |
|     w << "a" * 4096
 | |
|     Thread.new {
 | |
|       Thread.pass
 | |
|       w.close
 | |
|     }
 | |
|     result = ""
 | |
|     t = Thread.new {
 | |
|       while (Thread.pass; s = r.read(4096))
 | |
|         result << s
 | |
|       end
 | |
|     }
 | |
|     assert_raise(IOError) {w.flush}
 | |
|     assert_nothing_raised {t.join}
 | |
|     assert_equal(4097, result.size)
 | |
|   end
 | |
| end if IO.method_defined?(:nonblock)
 |