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
This commit is contained in:
parent
4bbb49b848
commit
688f2e1a89
@ -1,4 +1,7 @@
|
|||||||
Sat Jul 14 16:16:32 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Sat Jul 14 16:16:37 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* 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
|
* lib/test/unit.rb (Test::Unit::Runner#delete_worker): delete dead
|
||||||
worker from working set.
|
worker from working set.
|
||||||
|
@ -310,10 +310,9 @@ module Test
|
|||||||
end
|
end
|
||||||
|
|
||||||
def close
|
def close
|
||||||
begin
|
|
||||||
@io.close unless @io.closed?
|
@io.close unless @io.closed?
|
||||||
rescue IOError; end
|
|
||||||
self
|
self
|
||||||
|
rescue IOError
|
||||||
end
|
end
|
||||||
|
|
||||||
def quit
|
def quit
|
||||||
@ -323,6 +322,11 @@ module Test
|
|||||||
@io.close
|
@io.close
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def kill
|
||||||
|
Process.kill(:KILL, @pid)
|
||||||
|
rescue Errno::ESRCH
|
||||||
|
end
|
||||||
|
|
||||||
def died(*additional)
|
def died(*additional)
|
||||||
@status = :quit
|
@status = :quit
|
||||||
@io.close
|
@io.close
|
||||||
@ -474,6 +478,32 @@ module Test
|
|||||||
@ios.delete worker.io
|
@ios.delete worker.io
|
||||||
end
|
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
|
def start_watchdog
|
||||||
Thread.new do
|
Thread.new do
|
||||||
while stat = Process.wait2
|
while stat = Process.wait2
|
||||||
@ -592,32 +622,9 @@ module Test
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if @workers
|
quit_workers
|
||||||
@workers.each do |worker|
|
|
||||||
begin
|
|
||||||
timeout(1) do
|
|
||||||
worker.quit
|
|
||||||
end
|
|
||||||
rescue Errno::EPIPE
|
|
||||||
rescue Timeout::Error
|
|
||||||
end
|
|
||||||
worker.close
|
|
||||||
end
|
|
||||||
|
|
||||||
begin
|
unless @interrupt || !@options[:retry] || @need_quit
|
||||||
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
|
|
||||||
@options[:parallel] = false
|
@options[:parallel] = false
|
||||||
suites, rep = rep.partition {|r| r[:testcase] && r[:file] && !r[:report].empty?}
|
suites, rep = rep.partition {|r| r[:testcase] && r[:file] && !r[:report].empty?}
|
||||||
suites.map {|r| r[:file]}.uniq.each {|file| require file}
|
suites.map {|r| r[:file]}.uniq.each {|file| require file}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user