mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
test/ruby/test_io.rb: avoid EBADF
* test/ruby/test_io.rb (test_readpartial_locktmp): avoid EBADF [ruby-core:64773] [ruby-core:64775] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47422 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3146827521
commit
c3c1d6c60d
2 changed files with 24 additions and 14 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Sat Sep 6 07:46:51 2014 Eric Wong <e@80x24.org>
|
||||||
|
|
||||||
|
* test/ruby/test_io.rb (test_readpartial_locktmp): avoid EBADF
|
||||||
|
[ruby-core:64773] [ruby-core:64775]
|
||||||
|
|
||||||
Sat Sep 6 01:34:31 2014 Tanaka Akira <akr@fsij.org>
|
Sat Sep 6 01:34:31 2014 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* process.c (rb_f_exec): Call before_exec_async_signal_safe and
|
* process.c (rb_f_exec): Call before_exec_async_signal_safe and
|
||||||
|
|
|
@ -2866,24 +2866,29 @@ End
|
||||||
data = "a" * 100
|
data = "a" * 100
|
||||||
th = nil
|
th = nil
|
||||||
with_pipe do |r,w|
|
with_pipe do |r,w|
|
||||||
r.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
|
|
||||||
th = Thread.new {r.readpartial(100, buf)}
|
|
||||||
Thread.pass until th.stop?
|
|
||||||
buf.replace("")
|
|
||||||
assert_empty(buf, bug6099)
|
|
||||||
assert_predicate(th, :alive?)
|
|
||||||
w.write(data)
|
|
||||||
Thread.pass while th.alive?
|
|
||||||
end
|
|
||||||
assert_equal(data, buf, bug6099)
|
|
||||||
rescue RuntimeError # can't modify string; temporarily locked
|
|
||||||
ensure
|
|
||||||
if th
|
|
||||||
begin
|
begin
|
||||||
|
r.fcntl(Fcntl::F_SETFL, Fcntl::O_NONBLOCK)
|
||||||
|
th = Thread.new {r.readpartial(100, buf)}
|
||||||
|
|
||||||
|
Thread.pass until th.stop?
|
||||||
|
|
||||||
|
assert_equal 100, buf.bytesize
|
||||||
|
|
||||||
|
begin
|
||||||
|
buf.replace("")
|
||||||
|
rescue RuntimeError => e
|
||||||
|
assert_match(/can't modify string; temporarily locked/, e.message)
|
||||||
|
Thread.pass
|
||||||
|
end until buf.empty?
|
||||||
|
|
||||||
|
assert_empty(buf, bug6099)
|
||||||
|
assert_predicate(th, :alive?)
|
||||||
|
w.write(data)
|
||||||
|
Thread.pass while th.alive?
|
||||||
th.join
|
th.join
|
||||||
rescue IOError
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
assert_equal(data, buf, bug6099)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_advise_pipe
|
def test_advise_pipe
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue