more explicit synchronization.
* test/ruby/test_io.rb (test_race_closed_stream): wait for blocking by r.gets. On some systems (for example, high load average systems) can't start Thread correctly and can't wait r.gets in invoked Thread. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58356 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
e4c2f4fa26
commit
2ad7a741c0
@ -3400,16 +3400,19 @@ __END__
|
|||||||
def test_race_closed_stream
|
def test_race_closed_stream
|
||||||
bug13158 = '[ruby-core:79262] [Bug #13158]'
|
bug13158 = '[ruby-core:79262] [Bug #13158]'
|
||||||
closed = nil
|
closed = nil
|
||||||
|
q = Queue.new
|
||||||
IO.pipe do |r, w|
|
IO.pipe do |r, w|
|
||||||
thread = Thread.new do
|
thread = Thread.new do
|
||||||
begin
|
begin
|
||||||
|
q << true
|
||||||
while r.gets
|
while r.gets
|
||||||
end
|
end
|
||||||
ensure
|
ensure
|
||||||
closed = r.closed?
|
closed = r.closed?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
sleep 0.01
|
q.pop
|
||||||
|
sleep 0.1 # wait for blocking by r.gets
|
||||||
r.close
|
r.close
|
||||||
assert_raise_with_message(IOError, /stream closed/) do
|
assert_raise_with_message(IOError, /stream closed/) do
|
||||||
thread.join
|
thread.join
|
||||||
|
Loading…
x
Reference in New Issue
Block a user