summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-08-12 10:24:05 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-08-12 10:24:05 +0000
commit6d31e431c3bb09cf386c0fbef169a5307e689775 (patch)
treefb181e69dddc1b43292e058a5caab304584e8238 /django
parent3d012a18cec7edeb19f7fb579dc47dfae00a99bb (diff)
Fixed #4909 -- Fixed a race condition with middleware initialisation in multi-threaded setups. Thanks, colin@owlfish.com.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@5868 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/core/handlers/wsgi.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index 2db83fccfc..99d400d1bb 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -6,6 +6,7 @@ from django.utils.encoding import force_unicode
from django import http
from pprint import pformat
from shutil import copyfileobj
+from threading import Lock
try:
from cStringIO import StringIO
except ImportError:
@@ -176,13 +177,19 @@ class WSGIRequest(http.HttpRequest):
raw_post_data = property(_get_raw_post_data)
class WSGIHandler(BaseHandler):
+ initLock = Lock()
+
def __call__(self, environ, start_response):
from django.conf import settings
# Set up middleware if needed. We couldn't do this earlier, because
# settings weren't available.
if self._request_middleware is None:
- self.load_middleware()
+ self.initLock.acquire()
+ # Check that middleware is still uninitialised.
+ if self._request_middleware is None:
+ self.load_middleware()
+ self.initLock.release()
dispatcher.send(signal=signals.request_started)
try: