Bug #4683 » 0002-test_io-add-test-for-copy_stream-failing-on-EINTR.patch
| test/ruby/test_io.rb | ||
|---|---|---|
|
}
|
||
|
end
|
||
|
def trapping_usr1
|
||
|
@usr1_rcvd = 0
|
||
|
trap(:USR1) { @usr1_rcvd += 1 }
|
||
|
yield
|
||
|
ensure
|
||
|
trap(:USR1, "DEFAULT")
|
||
|
end
|
||
|
def test_pipe
|
||
|
r, w = IO.pipe
|
||
|
assert_instance_of(IO, r)
|
||
| ... | ... | |
|
result = t.value
|
||
|
assert_equal(megacontent, result)
|
||
|
}
|
||
|
with_socketpair {|s1, s2|
|
||
|
begin
|
||
|
s1.nonblock = true
|
||
|
rescue Errno::EBADF
|
||
|
skip "nonblocking IO for pipe is not implemented"
|
||
|
end
|
||
|
trapping_usr1 do
|
||
|
nr = 10
|
||
|
pid = fork do
|
||
|
s1.close
|
||
|
IO.select([s2])
|
||
|
Process.kill(:USR1, Process.ppid)
|
||
|
s2.read
|
||
|
end
|
||
|
s2.close
|
||
|
nr.times do
|
||
|
assert_equal megacontent.bytesize, IO.copy_stream("megasrc", s1)
|
||
|
end
|
||
|
assert_equal(1, @usr1_rcvd)
|
||
|
s1.close
|
||
|
_, status = Process.waitpid2(pid)
|
||
|
assert status.success?, status.inspect
|
||
|
end
|
||
|
}
|
||
|
end
|
||
|
}
|
||
|
end
|
||