summaryrefslogtreecommitdiff
path: root/test
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 /test
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
Diffstat (limited to 'test')
-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