From c3c1d6c60d482e29c7997c85969f958e11b0316f Mon Sep 17 00:00:00 2001 From: normal Date: Fri, 5 Sep 2014 22:49:29 +0000 Subject: 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 --- test/ruby/test_io.rb | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'test/ruby/test_io.rb') 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 -- cgit v1.2.3