Issue #1388 has been updated by neomjp neomjp.


Hi,

After a long hiatus, I checked the status of this make btest, test_io.rb, segfault bug.

In trunk,

ruby-1.9.2-r23198 segfault (<- when this bug was reported.)
ruby-1.9.2-preview1 (r24184) segfault
ruby-1.9.2-preview2 (r24782) segfault
ruby-1.9.3-r27622 segfault
ruby-1.9.3-r27623 timeout or pass but no segfault (<- fix for test_io.rb
megacontent-copy_stream deadlock)
ruby-1.9.3-r28731 timeout or pass but no segfault

In ruby_1_9_2 branch,

ruby-1.9.2-preview3 (r28108) Too many "[BUG] pthread_mutex_unlock : Operation not permitted
(EPERM)" errors. Not sure if this segfault occurs.
ruby-1.9.2-r28508 timeout or pass but no segfault (<- fix for pthread bug)
ruby-1.9.2-rc1 (r28522) timeout or pass but no segfault
ruby-1.9.2-rc2 (r28613) timeout or pass but no segfault
ruby-1.9.2-r28724 timeout or pass but no segfault

In ruby_1_9_1 branch,

ruby-1.9.1-p429 (r28522) segfault
ruby-1.9.1-r28641 segfault

So, this segfault was seen only before the test was changed in r27623. After the
fix, the test will either pass, or timeout as show below:

#246 test_io.rb: 
       at_exit { p :foo }
   
       megacontent = "abc" * 12345678
       #File.open("megasrc", "w") {|f| f << megacontent }
   
       Thread.new { sleep rand*0.2; Process.kill(:INT, $$) }
   
       r1, w1 = IO.pipe
       r2, w2 = IO.pipe
       t1 = Thread.new { w1 << megacontent; w1.close }
       t2 = Thread.new { r2.read; r2.close }
       IO.copy_stream(r1, w2) rescue nil
       w2.close
       r1.close
       t1.join
       t2.join
       #=> killed by SIGKILL (signal 9) (timeout)  megacontent-copy_stream
FAIL 1/925 tests failed
make: *** [yes-btest] Error 1

What happens when it timeouts? When this test was isolated in a file and executed, it
sometimes showed a hang (or deadlock?). Maybe, the pipes were not properly killed?

1. I do not see a segfault any more. I see a pass or timeout (a hang or deadlock, meaning the
pipes were not properly killed) instead.
2. r27623 may be ported also to ruby_1_9_1 branch. It would turn the second test failure
reported in Bug #3292 [ruby-core:30238] from a segfault into a timeout.
3. The patch for ruby.c in [ruby-core:23255] was incorporated in r23468.
4. The declarations in strftime.c that the patch in [ruby-core:23241] [Bug #1388] tried to
fix were removed in r28592. So, the patch is no more valid.
5. As for maintainership, I would be glad if I could be of some help, but I do not think I
can promise to keep the 3 months rule in [ruby-core:25764]. Sometimes, I can compile ruby and
run tests, but other times, my daily work will not allow me the time. I should better remain
just another cygwin tester.
----------------------------------------
http://redmine.ruby-lang.org/issues/show/1388

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