summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--test/ruby/test_io.rb33
2 files changed, 24 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 55c18523d8..05c899f6e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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