Project

General

Profile

Actions

Bug #7420

closed

Writeable pipe and timeout tests are failing (MinGW)

Added by luislavena (Luis Lavena) about 12 years ago. Updated about 12 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.0.0dev (2012-11-22 trunk 37790) [i386-mingw32]
Backport:
[ruby-core:49831]

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

  1. 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:in write_nonblock' C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:103:in fill_pipe'
    C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:87:in `test_wait_writable_EPIPE'

  2. 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:in write_nonblock' C:/Users/Luis/Code/ruby/ruby/test/io/wait/test_io_wait.rb:103:in fill_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) about 12 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) about 12 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?

Actions #3

Updated by nobu (Nobuyoshi Nakada) about 12 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]
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0