aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-24 03:01:59 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-24 03:01:59 +0000
commit269b568291cd0ab7cd4015c0dbe64602bc264370 (patch)
tree70ff47617efe7ba549180c985e2fc0b8d142edb6
parent971d74a22549b86422d4a7c780fcdfd21a69072d (diff)
downloadruby-269b568291cd0ab7cd4015c0dbe64602bc264370.tar.gz
test_fileutils.rb: fix deadlock
* test/fileutils/test_fileutils.rb (assert_output_lines): ensure that write pipe is closed, not the reader thread to deadlock when an exception raised in the given block. [ruby-core:78053] [Bug #12910] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56892 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--test/fileutils/test_fileutils.rb17
1 files changed, 15 insertions, 2 deletions
diff --git a/test/fileutils/test_fileutils.rb b/test/fileutils/test_fileutils.rb
index fedf5d4780..4d790a74bc 100644
--- a/test/fileutils/test_fileutils.rb
+++ b/test/fileutils/test_fileutils.rb
@@ -17,8 +17,11 @@ class TestFileUtils < Test::Unit::TestCase
fu.instance_variable_set(:@fileutils_output, write)
th = Thread.new { read.read }
th2 = Thread.new {
- yield
- write.close
+ begin
+ yield
+ ensure
+ write.close
+ end
}
th_value, _ = assert_join_threads([th, th2])
lines = th_value.lines.map {|l| l.chomp }
@@ -213,6 +216,16 @@ class TestFileUtils < Test::Unit::TestCase
# Test Cases
#
+ def test_assert_output_lines
+ assert_raise(MiniTest::Assertion) {
+ Timeout.timeout(0.1) {
+ assert_output_lines([]) {
+ raise "ok"
+ }
+ }
+ }
+ end
+
def test_pwd
check_singleton :pwd