Issue #2008 has been updated by Motohiro KOSAKI.


At least, current trunk + FreeBSD 8.2 don't reproduce this issue.

----------------------------------------
Bug #2008: test_io.rb: test 2 fails on FreeBSD
http://redmine.ruby-lang.org/issues/2008

Author: Lucas Nussbaum
Status: Feedback
Priority: Low
Assignee: Akira Tanaka
Category: core
Target version: 1.9.3
ruby -v: 1.9.1.243


=begin
 Hi,
 
 Test 2 in test_io.rb fails on FreeBSD. This is related to http://redmine.ruby-lang.org/issues/show/1066, which, according to the comments posted after the bug was closed, wasn't really fixed.
 
 I ran into this on Debian GNU/kfreebsd (Debian userland, freebsd kernel). One of our freebsd porter wrote (see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=543805):
 
 > The test assumes that the kernel buffer for pipes have fixed size.
 > It does not have to be true, there could be adaptive buffer size
 > provided by kernel. After filling whole kernel buffer (by non-blocking 
 > write), it might be required to buffer becomes filled only from half
 > or even empty. The next write() might be blocked until whole 
 > kernel buffer is read. Such behaviour of kernel is correct one.
 > 
 > The kernel of FreeBSD uses adaptive pipe sizes and direct pipe writes,
 > see http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/kern/sys_pipe.c
 
 (It is likely to be the same on Mac OS X)
 
 He suggests changing the test to:
 >   begin
 >     require "io/nonblock"
 >     r, w = IO.pipe
 >     w.nonblock = true
 >     bytes = w.write_nonblock("a" * 100000)
 >     w.nonblock = false
 >     t1 = Thread.new { w.write("b" * 4096) }
 >     t2 = Thread.new { w.write("c" * 4096) }
 >     sleep 0.5
 >     blocks = 2 + bytes/4096
 >     blocks.times {
 >          r.sysread(4096).length
 >          sleep 0.1
 >     }
 >     t1.join
 >     t2.join
 >   rescue LoadError
 >   end
 
 However, I don't understand what that test is trying to test. It might be better to simply remove that test...
=end



-- 
http://redmine.ruby-lang.org