Module: Unicorn::SoftTimeout
- Defined in:
- lib/unicorn/soft_timeout.rb,
lib/unicorn/soft_timeout/version.rb
Constant Summary collapse
- VERSION =
"0.0.1"
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.new(app, soft_timeout = 12) ⇒ Object
5 6 7 8 9 10 11 |
# 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 |
Instance Method Details
#process_client(client) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# 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 |