summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-07-14 07:16:38 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-07-14 07:16:38 +0000
commit688f2e1a893e04457a1a5aa3577b13f74b2bc080 (patch)
tree650cb7c263dab32c8983cbad4f2b2d8e73e04269 /lib
parent4bbb49b8482003a131b4f3bcce8d17b63ce35943 (diff)
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
Diffstat (limited to 'lib')
-rw-r--r--lib/test/unit.rb63
1 files changed, 35 insertions, 28 deletions
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}