mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
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
2 changed files with 39 additions and 29 deletions
|
@ -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
|
||||
worker from working set.
|
||||
|
|
|
@ -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
|
||||
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}
|
||||
|
|
Loading…
Add table
Reference in a new issue