1
0
Fork 0
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:
nobu 2012-07-14 07:16:38 +00:00
parent 4bbb49b848
commit 688f2e1a89
2 changed files with 39 additions and 29 deletions

View file

@ -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.

View file

@ -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}