mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Return processing lock to dispatcher, the finer grained lock was incompatible with the reloading in development mode.
This commit also adds ActionController::Dispatcher#dispatch_unlocking -- non-locking version of dispatch.
It's named anologously to POSIX {getc,getchar,...}_unlocked functions.
Signed-off-by: Michael Koziarski <michael@koziarski.com>
[#1170 state:committed]
This commit is contained in:
committed by
Michael Koziarski
parent
f550c86257
commit
b437a7d34e
@@ -290,8 +290,6 @@ module ActionController #:nodoc:
|
||||
@@allow_concurrency = false
|
||||
cattr_accessor :allow_concurrency
|
||||
|
||||
@@guard = Monitor.new
|
||||
|
||||
# Modern REST web services often need to submit complex data to the web application.
|
||||
# The <tt>@@param_parsers</tt> hash lets you register handlers which will process the HTTP body and add parameters to the
|
||||
# <tt>params</tt> hash. These handlers are invoked for POST and PUT requests.
|
||||
@@ -532,12 +530,7 @@ module ActionController #:nodoc:
|
||||
assign_names
|
||||
|
||||
log_processing
|
||||
|
||||
if @@allow_concurrency
|
||||
send(method, *arguments)
|
||||
else
|
||||
@@guard.synchronize { send(method, *arguments) }
|
||||
end
|
||||
send(method, *arguments)
|
||||
|
||||
send_response
|
||||
ensure
|
||||
|
||||
@@ -2,6 +2,8 @@ module ActionController
|
||||
# Dispatches requests to the appropriate controller and takes care of
|
||||
# reloading the app after each request when Dependencies.load? is true.
|
||||
class Dispatcher
|
||||
@@guard = Mutex.new
|
||||
|
||||
class << self
|
||||
def define_dispatcher_callbacks(cache_classes)
|
||||
unless cache_classes
|
||||
@@ -99,7 +101,7 @@ module ActionController
|
||||
@output, @request, @response = output, request, response
|
||||
end
|
||||
|
||||
def dispatch
|
||||
def dispatch_unlocked
|
||||
begin
|
||||
run_callbacks :before_dispatch
|
||||
handle_request
|
||||
@@ -110,6 +112,16 @@ module ActionController
|
||||
end
|
||||
end
|
||||
|
||||
def dispatch
|
||||
if ActionController::Base.allow_concurrency
|
||||
dispatch_unlocked
|
||||
else
|
||||
@@guard.synchronize do
|
||||
dispatch_unlocked
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def dispatch_cgi(cgi, session_options)
|
||||
if cgi ||= self.class.failsafe_response(@output, '400 Bad Request') { CGI.new }
|
||||
@request = CgiRequest.new(cgi, session_options)
|
||||
|
||||
Reference in New Issue
Block a user