ruby-changes:24334
From: nobu <ko1@a...>
Date: Sat, 14 Jul 2012 16:17:06 +0900 (JST)
Subject: [ruby-changes:24334] nobu:r36387 (trunk): test/unit.rb: extract quit_workers
nobu 2012-07-14 16:16:38 +0900 (Sat, 14 Jul 2012) New Revision: 36387 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=36387 Log: test/unit.rb: extract quit_workers * lib/test/unit.rb (Test::Unit::Runner#quit_workers): close and kill all workers. Modified files: trunk/ChangeLog trunk/lib/test/unit.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 36386) +++ ChangeLog (revision 36387) @@ -1,5 +1,8 @@ -Sat Jul 14 16:16:32 2012 Nobuyoshi Nakada <nobu@r...> +Sat Jul 14 16:16:37 2012 Nobuyoshi Nakada <nobu@r...> + * lib/test/unit.rb (Test::Unit::Runner#quit_workers): close and kill + all workers. + * lib/test/unit.rb (Test::Unit::Runner#delete_worker): delete dead worker from working set. Index: lib/test/unit.rb =================================================================== --- lib/test/unit.rb (revision 36386) +++ lib/test/unit.rb (revision 36387) @@ -310,10 +310,9 @@ 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 @@ @io.close end + def kill + Process.kill(:KILL, @pid) + rescue Errno::ESRCH + end + def died(*additional) @status = :quit @io.close @@ -474,6 +478,32 @@ @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 @@ 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 + quit_workers - 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 - - 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} -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/