mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
Puma::Cluster#stop_workers - use WNOHANG with nil return tests
Ruby 2.6 introduced a bug that affects worker shutdown (waitpid). Added code using Process::WNOHANG along with needed logic. Adds worker status (via $?) and total shutdown time to log. Co-authored-by: MSP-Greg <greg.mpls@gmail.com> Co-authored-by: guilleiguaran <guilleiguaran@gmail.com>
This commit is contained in:
parent
ca03c52075
commit
b94c3e34fa
1 changed files with 19 additions and 1 deletions
|
@ -37,7 +37,25 @@ module Puma
|
|||
@workers.each { |x| x.term }
|
||||
|
||||
begin
|
||||
@workers.each { |w| Process.waitpid(w.pid) }
|
||||
if RUBY_VERSION < '2.6'
|
||||
@workers.each { |w| Process.waitpid(w.pid) }
|
||||
else
|
||||
# below code is for a bug in Ruby 2.6+, above waitpid call hangs
|
||||
t_st = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
||||
pids = @workers.map(&:pid)
|
||||
loop do
|
||||
pids.reject! do |w_pid|
|
||||
if Process.waitpid(w_pid, Process::WNOHANG)
|
||||
log " worker status: #{$?}"
|
||||
true
|
||||
end
|
||||
end
|
||||
break if pids.empty?
|
||||
sleep 0.5
|
||||
end
|
||||
t_end = Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
||||
log format(" worker shutdown time: %6.2f", t_end - t_st)
|
||||
end
|
||||
rescue Interrupt
|
||||
log "! Cancelled waiting for workers"
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue