From: neomjp neomjp Date: 2010-07-31T04:54:48+09:00 Subject: [ruby-core:31555] [Bug #1388] cygwin-1.7, gcc4-4.3, and ruby-1.9. make btest #236 test_io.rb Segmentation fault 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