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

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/

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