From 6c83a3ab60c5d2a98842bc5bdf76fc3df598441d Mon Sep 17 00:00:00 2001 From: normal Date: Wed, 20 Jun 2018 23:38:16 +0000 Subject: [PATCH] test/ruby/test_io.rb: fix timing sensitive test For systems with sleepy timer thread disabled, the signal handler does not fire soon enough and we need to ensure the signal is received before we check its value. So use a self-pipe here. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63708 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_io.rb | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index 13a7fb678a..05f33a1cb4 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -85,11 +85,16 @@ class TestIO < Test::Unit::TestCase end def trapping_usr2 - @usr1_rcvd = 0 - trap(:USR2) { @usr1_rcvd += 1 } - yield + @usr2_rcvd = 0 + r, w = IO.pipe + trap(:USR2) do + w.write([@usr2_rcvd += 1].pack('L')) + end + yield r ensure trap(:USR2, "DEFAULT") + w&.close + r&.close end def test_pipe @@ -864,7 +869,7 @@ class TestIO < Test::Unit::TestCase rescue Errno::EBADF skip "nonblocking IO for pipe is not implemented" end - trapping_usr2 do + trapping_usr2 do |rd| nr = 30 begin pid = fork do @@ -878,7 +883,7 @@ class TestIO < Test::Unit::TestCase nr.times do assert_equal megacontent.bytesize, IO.copy_stream("megasrc", s1) end - assert_equal(1, @usr1_rcvd) + assert_equal(1, rd.read(4).unpack1('L')) ensure s1.close _, status = Process.waitpid2(pid) if pid