in lib/puma/thread_pool.rb [304:346]
def shutdown(timeout=-1)
threads = @mutex.synchronize do
@shutdown = true
@not_empty.broadcast
@not_full.broadcast
@auto_trim.stop if @auto_trim
@reaper.stop if @reaper
@workers.dup
end
if timeout == -1
threads.each(&:join)
else
timeout.times do
threads.delete_if do |t|
t.join 1
end
if threads.empty?
break
else
sleep 1
end
end
threads.each do |t|
t.raise ForceShutdown
end
threads.each do |t|
t.join SHUTDOWN_GRACE_TIME
end
end
@spawned = 0
@workers = []
end