Bug #7420
closedWriteable pipe and timeout tests are failing (MinGW)
Description
=begin
The tests added in r37785, associated with Feature #4646 might require a guard against Windows because are failing in the Windows CI:
http://ci.rubyinstaller.org/job/ruby-trunk-x64-test-all/246/console
http://ci.rubyinstaller.org/job/ruby-trunk-x86-test-all/346/console
- 
Error: 
 test_wait_writable_EPIPE(TestIOWait):
 Errno::EWOULDBLOCK: A non-blocking socket operation could not be completed immediately. - write would block
 C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:103:inwrite_nonblock' C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:103:infill_pipe'
 C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:87:in `test_wait_writable_EPIPE'
- 
Error: 
 test_wait_writable_timeout(TestIOWait):
 Errno::EWOULDBLOCK: A non-blocking socket operation could not be completed immediately. - write would block
 C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:103:inwrite_nonblock' C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:103:infill_pipe'
 C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:80:in `test_wait_writable_timeout'
=end
        
           Updated by phasis68 (Heesob Park) almost 13 years ago
          Updated by phasis68 (Heesob Park) almost 13 years ago
          
          
        
        
      
      As I know, Errno::EWOULDBLOCK is not the same as Errno::EAGAIN on Windows.
Here is a patch:
diff --git a/test_io_wait.rb b/test_io_wait.rb.new
index 676809c..c322efd 100644
--- a/test_io_wait.rb
+++ b/test_io_wait.rb.new
@@ -101,7 +101,7 @@ private
buf = " " * 4096
begin
written += @w.write_nonblock(buf)
- rescue Errno::EAGAIN
- rescue Errno::EAGAIN,Errno::EWOULDBLOCK
 return written
 end while true
 end
        
           Updated by nobu (Nobuyoshi Nakada) almost 13 years ago
          Updated by nobu (Nobuyoshi Nakada) almost 13 years ago
          
          
        
        
      
      Thank you for the pointing out.
Since SystemCallError.=== matches by the errno values, so it works on platforms where they are just aliases, but EAGAIN and EWOULDBLOCK were actually different on Windows.
Should Errno::EAGAIN match an instance of Errno::EWOULDBLOCK on every platforms where those are defined?
        
           Updated by nobu (Nobuyoshi Nakada) almost 13 years ago
          Updated by nobu (Nobuyoshi Nakada) almost 13 years ago
          
          
        
        
      
      - Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r37984.
Luis, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
test_io_wait.rb: Bug #7420
- test/io/wait/test_io_wait.rb (TestIOWait#fill_pipe):
 Errno::EWOULDBLOCK may not be the same as Errno::EAGAIN. patch by
 phasis68 (Heesob Park) at [ruby-core:49894]. [Bug #7420]