diff options
author | Eric Wong <e@80x24.org> | 2014-01-17 02:03:04 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2014-01-17 08:34:29 +0000 |
commit | 3e701ee74ff29bdf5daa3249acede5a85a2b0097 (patch) | |
tree | 176888175c2b975f9a1ac1a33f0452e6b3d3bf86 /lib/rainbows/base.rb | |
parent | 1b3e68e3eac0c3fbb2a32e4fddd26ee8a50ec627 (diff) | |
download | rainbows-3e701ee74ff29bdf5daa3249acede5a85a2b0097.tar.gz |
Internal reworking of unicorn 4.8.0 completely broke us(!). This commit fixes things, but it means we no longer support unicorn <= 4.7. Sorry about that.
Diffstat (limited to 'lib/rainbows/base.rb')
-rw-r--r-- | lib/rainbows/base.rb | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lib/rainbows/base.rb b/lib/rainbows/base.rb index 54f1d2d..a7ba17d 100644 --- a/lib/rainbows/base.rb +++ b/lib/rainbows/base.rb @@ -8,24 +8,33 @@ module Rainbows::Base # :stopdoc: + def sig_receiver(worker) + begin + worker.to_io.kgio_wait_readable + worker.kgio_tryaccept # Unicorn::Worker#kgio_tryaccept + rescue => e + Rainbows.alive or return + Unicorn.log_error(Rainbows.server.logger, "signal receiver", e) + end while true + end + # this method is called by all current concurrency models def init_worker_process(worker) # :nodoc: - super(worker) + readers = super(worker) Rainbows::Response.setup Rainbows::MaxBody.setup Rainbows.worker = worker - # we're don't use the self-pipe mechanism in the Rainbows! worker - # since we don't defer reopening logs - Rainbows::HttpServer::SELF_PIPE.each { |x| x.close }.clear - # spawn Threads since Logger takes a mutex by default and # we can't safely lock a mutex in a signal handler trap(:USR1) { Thread.new { reopen_worker_logs(worker.nr) } } trap(:QUIT) { Thread.new { Rainbows.quit! } } [:TERM, :INT].each { |sig| trap(sig) { exit!(0) } } # instant shutdown Rainbows::ProcessClient.const_set(:APP, Rainbows.server.app) + Thread.new { sig_receiver(worker) } logger.info "Rainbows! #@use worker_connections=#@worker_connections" + Rainbows.readers = readers # for Rainbows.quit + readers # unicorn 4.8+ needs this end def process_client(client) |