From 3e701ee74ff29bdf5daa3249acede5a85a2b0097 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 17 Jan 2014 02:03:04 +0000 Subject: unicorn 4.8 compatibility + test version bumps 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. --- lib/rainbows/base.rb | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'lib/rainbows') 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) -- cgit v1.2.3-24-ge0c7