From 688f2e1a893e04457a1a5aa3577b13f74b2bc080 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 14 Jul 2012 07:16:38 +0000 Subject: test/unit.rb: extract quit_workers * lib/test/unit.rb (Test::Unit::Runner#quit_workers): close and kill all workers. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/test/unit.rb | 63 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 28 deletions(-) (limited to 'lib/test') diff --git a/lib/test/unit.rb b/lib/test/unit.rb index 0545579b23..92c3e0f5e0 100644 --- a/lib/test/unit.rb +++ b/lib/test/unit.rb @@ -310,10 +310,9 @@ module Test end def close - begin - @io.close unless @io.closed? - rescue IOError; end + @io.close unless @io.closed? self + rescue IOError end def quit @@ -323,6 +322,11 @@ module Test @io.close end + def kill + Process.kill(:KILL, @pid) + rescue Errno::ESRCH + end + def died(*additional) @status = :quit @io.close @@ -474,6 +478,32 @@ module Test @ios.delete worker.io end + def quit_workers + return if @workers.empty? + @workers.reject! do |worker| + begin + timeout(1) do + worker.quit + end + rescue Errno::EPIPE + rescue Timeout::Error + end + worker.close + end + + return if @workers.empty? + begin + timeout(0.2 * @workers.size) do + Process.waitall + end + rescue Timeout::Error + @workers.each do |worker| + worker.kill + end + @worker.clear + end + end + def start_watchdog Thread.new do while stat = Process.wait2 @@ -592,32 +622,9 @@ module Test end end - if @workers - @workers.each do |worker| - begin - timeout(1) do - worker.quit - end - rescue Errno::EPIPE - rescue Timeout::Error - end - worker.close - end - - begin - timeout(0.2*@workers.size) do - Process.waitall - end - rescue Timeout::Error - @workers.each do |worker| - begin - Process.kill(:KILL,worker.pid) - rescue Errno::ESRCH; end - end - end - end + quit_workers - if !(@interrupt || !@options[:retry] || @need_quit) && @workers + unless @interrupt || !@options[:retry] || @need_quit @options[:parallel] = false suites, rep = rep.partition {|r| r[:testcase] && r[:file] && !r[:report].empty?} suites.map {|r| r[:file]}.uniq.each {|file| require file} -- cgit v1.2.3