diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-06-20 23:38:16 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-06-20 23:38:16 +0000 |
commit | 6c83a3ab60c5d2a98842bc5bdf76fc3df598441d (patch) | |
tree | 8c400a525d1758ea77988806560ef9ab1202bd23 /test/ruby/test_io.rb | |
parent | 34dbd74f0c27ffa9a92575682535f3254fbf6758 (diff) | |
download | ruby-6c83a3ab60c5d2a98842bc5bdf76fc3df598441d.tar.gz |
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
Diffstat (limited to 'test/ruby/test_io.rb')
-rw-r--r-- | test/ruby/test_io.rb | 15 |
1 files 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 |