summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-06-20 23:38:16 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-06-20 23:38:16 +0000
commit6c83a3ab60c5d2a98842bc5bdf76fc3df598441d (patch)
tree8c400a525d1758ea77988806560ef9ab1202bd23
parent34dbd74f0c27ffa9a92575682535f3254fbf6758 (diff)
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
-rw-r--r--test/ruby/test_io.rb15
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