mirror of
https://github.com/github/rails.git
synced 2026-01-28 15:58:03 -05:00
Handle exit, reload, and restart immediately if not processing a request. References #11471 [guillaume, Jeremy Kemper]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9151 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -73,18 +73,20 @@ class RailsFCGIHandler
|
||||
def process_each_request(provider)
|
||||
cgi = nil
|
||||
|
||||
provider.each_cgi do |cgi|
|
||||
process_request(cgi)
|
||||
catch :exit do
|
||||
provider.each_cgi do |cgi|
|
||||
process_request(cgi)
|
||||
|
||||
case when_ready
|
||||
when :reload
|
||||
reload!
|
||||
when :restart
|
||||
close_connection(cgi)
|
||||
restart!
|
||||
when :exit
|
||||
close_connection(cgi)
|
||||
break
|
||||
case when_ready
|
||||
when :reload
|
||||
reload!
|
||||
when :restart
|
||||
close_connection(cgi)
|
||||
restart!
|
||||
when :exit
|
||||
close_connection(cgi)
|
||||
throw :exit
|
||||
end
|
||||
end
|
||||
end
|
||||
rescue SignalException => signal
|
||||
@@ -93,7 +95,7 @@ class RailsFCGIHandler
|
||||
end
|
||||
|
||||
def process_request(cgi)
|
||||
@when_ready = nil
|
||||
@processing, @when_ready = true, nil
|
||||
gc_countdown
|
||||
|
||||
with_signal_handler 'USR1' do
|
||||
@@ -105,6 +107,8 @@ class RailsFCGIHandler
|
||||
dispatcher_error error, 'unhandled dispatch error'
|
||||
end
|
||||
end
|
||||
ensure
|
||||
@processing = false
|
||||
end
|
||||
|
||||
def logger
|
||||
@@ -158,17 +162,29 @@ class RailsFCGIHandler
|
||||
|
||||
def exit_handler(signal)
|
||||
dispatcher_log :info, "asked to stop ASAP"
|
||||
@when_ready = :exit
|
||||
if @processing
|
||||
@when_ready = :exit
|
||||
else
|
||||
throw :exit
|
||||
end
|
||||
end
|
||||
|
||||
def reload_handler(signal)
|
||||
dispatcher_log :info, "asked to reload ASAP"
|
||||
@when_ready = :reload
|
||||
if @processing
|
||||
@when_ready = :reload
|
||||
else
|
||||
reload!
|
||||
end
|
||||
end
|
||||
|
||||
def restart_handler(signal)
|
||||
dispatcher_log :info, "asked to restart ASAP"
|
||||
@when_ready = :restart
|
||||
if @processing
|
||||
@when_ready = :restart
|
||||
else
|
||||
restart!
|
||||
end
|
||||
end
|
||||
|
||||
def restart!
|
||||
|
||||
Reference in New Issue
Block a user