diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | test/ruby/test_io.rb | 33 |
2 files changed, 24 insertions, 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> * process.c (rb_f_exec): Call before_exec_async_signal_safe and diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index 3bba329344..0afcbbac0c 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -2866,24 +2866,29 @@ End data = "a" * 100 th = nil 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 + 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 - rescue IOError end end + assert_equal(data, buf, bug6099) end def test_advise_pipe |