[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]