ruby-changes:69410
From: Koichi <ko1@a...>
Date: Mon, 25 Oct 2021 17:38:59 +0900 (JST)
Subject: [ruby-changes:69410] a1c4cab11d (master): check other IO#close calls
https://git.ruby-lang.org/ruby.git/commit/?id=a1c4cab11d From a1c4cab11d613d7df037a81a770ee44a23a2e9be Mon Sep 17 00:00:00 2001 From: Koichi Sasada <ko1@a...> Date: Mon, 25 Oct 2021 17:34:35 +0900 Subject: check other IO#close calls http://ci.rvm.jp/results/trunk@ruby-iga/3690333 > tool/lib/test/unit/parallel.rb:68:in `close': Bad file descriptor (Errno::EBADF) --- tool/lib/test/unit/parallel.rb | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/tool/lib/test/unit/parallel.rb b/tool/lib/test/unit/parallel.rb index 544239921cb..5fdf3628607 100644 --- a/tool/lib/test/unit/parallel.rb +++ b/tool/lib/test/unit/parallel.rb @@ -35,6 +35,20 @@ module Test https://github.com/ruby/ruby/blob/trunk/tool/lib/test/unit/parallel.rb#L35 _report "start", Marshal.dump([inst.class.name, inst.__name__]) end + def close_io io, suite + # To figure out which suite raises EBADF error. + begin + io.close if io && !io.closed? + rescue Exception => e + STDERR.puts <<~EOS + !!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! #{e} at #{suite.name} + !!!!!!!!!!!!!!!!!!!!!!!!!!!! + EOS + raise + end + end + def _run_suite(suite, type) # :nodoc: @partial_report = [] orig_testout = Test::Unit::Runner.output @@ -65,13 +79,15 @@ module Test https://github.com/ruby/ruby/blob/trunk/tool/lib/test/unit/parallel.rb#L79 $stdin = orig_stdin $stdout = orig_stdout - o.close + close_io o, suite + begin th.join rescue IOError raise unless /stream closed|closed stream/ =~ $!.message end - i.close + + close_io i, suite result << @partial_report @partial_report = nil @@ -85,21 +101,8 @@ module Test https://github.com/ruby/ruby/blob/trunk/tool/lib/test/unit/parallel.rb#L101 Test::Unit::Runner.output = orig_stdout $stdin = orig_stdin if orig_stdin $stdout = orig_stdout if orig_stdout - - # To figure out which suite raises EBADF error. - begin - o.close if o && !o.closed? - rescue Exception => e - STDERR.puts "#{e} at #{suite.name} (o)" - raise - end - - begin - i.close if i && !i.closed? - rescue Exception => e - STDERR.puts "#{e} at #{suite.name} (i)" - raise - end + close_io o, suite + close_io i, suite end def run(args = []) # :nodoc: -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/