summaryrefslogtreecommitdiff
path: root/lib/test/unit.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/test/unit.rb')
-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}