module Unicorn::SoftTimeout
Constants
- VERSION
Public Class Methods
new(app, soft_timeout = 12)
click to toggle source
# File lib/unicorn/soft_timeout.rb, line 5 def self.new(app, soft_timeout = 12) ObjectSpace.each_object(Unicorn::HttpServer) do |s| s.extend(self) s.instance_variable_set(:@_soft_timeout, soft_timeout) end app # pretend to be Rack middleware since it was in the past end
Public Instance Methods
process_client(client)
click to toggle source
Calls superclass method
# File lib/unicorn/soft_timeout.rb, line 13 def process_client(client) worker_pid = Process.pid current_thread = Thread.current watcher = Thread.new do sleep(@_soft_timeout) logger.warn "#{self}: worker (pid: #{worker_pid}) exceeds soft timeout (limit: #{@_soft_timeout})" Process.kill :QUIT, worker_pid # graceful shutdown current_thread.raise Timeout::Error.new('Soft timeout exceeded') end super(client) # Unicorn::HttpServer#process_client watcher.terminate end