ruby-changes:39458
From: nobu <ko1@a...>
Date: Wed, 12 Aug 2015 12:51:21 +0900 (JST)
Subject: [ruby-changes:39458] nobu:r51539 (trunk): envutil.rb: abort at timeout
nobu 2015-08-12 12:50:59 +0900 (Wed, 12 Aug 2015) New Revision: 51539 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=51539 Log: envutil.rb: abort at timeout * test/lib/envutil.rb (invoke_ruby): abort at timeout and show the backtrace of the target process. Modified files: trunk/test/lib/envutil.rb Index: test/lib/envutil.rb =================================================================== --- test/lib/envutil.rb (revision 51538) +++ test/lib/envutil.rb (revision 51539) @@ -73,12 +73,14 @@ module EnvUtil https://github.com/ruby/ruby/blob/trunk/test/lib/envutil.rb#L73 th_stderr = Thread.new { err_p.read } if capture_stderr && capture_stderr != :merge_to_stdout in_p.write stdin_data.to_str unless stdin_data.empty? in_p.close - unless (!th_stdout || th_stdout.join(timeout)) && (!th_stderr || th_stderr.join(timeout)) + if (!th_stdout || th_stdout.join(timeout)) && (!th_stderr || th_stderr.join(timeout)) + timeout_error = nil + else signals = Array(signal).select do |sig| DEFAULT_SIGNALS[sig.to_s] or DEFAULT_SIGNALS[Signal.signame(sig)] rescue false end - signals |= [:KILL] + signals |= [:ABRT, :KILL] case pgroup = opt[:pgroup] when 0, true pgroup = -pid @@ -102,10 +104,6 @@ module EnvUtil https://github.com/ruby/ruby/blob/trunk/test/lib/envutil.rb#L104 end end end - if timeout_error - bt = caller_locations - raise timeout_error, "execution of #{bt.shift.label} expired", bt.map(&:to_s) - end status = $? end stdout = th_stdout.value if capture_stdout @@ -115,6 +113,12 @@ module EnvUtil https://github.com/ruby/ruby/blob/trunk/test/lib/envutil.rb#L113 status ||= Process.wait2(pid)[1] stdout = stdout_filter.call(stdout) if stdout_filter stderr = stderr_filter.call(stderr) if stderr_filter + if timeout_error + bt = caller_locations + msg = "execution of #{bt.shift.label} expired" + msg = Test::Unit::Assertions::FailDesc[status, msg, [stdout, stderr].join("\n")].() + raise timeout_error, msg, bt.map(&:to_s) + end return stdout, stderr, status end ensure -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/