diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2007-08-12 10:24:05 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2007-08-12 10:24:05 +0000 |
| commit | 6d31e431c3bb09cf386c0fbef169a5307e689775 (patch) | |
| tree | fb181e69dddc1b43292e058a5caab304584e8238 | |
| parent | 3d012a18cec7edeb19f7fb579dc47dfae00a99bb (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
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/core/handlers/wsgi.py | 9 |
2 files changed, 9 insertions, 1 deletions
@@ -78,6 +78,7 @@ answer newbie questions, and generally made Django that much better: Bryan Chow <bryan at verdjn dot com> Michal Chruszcz <troll@pld-linux.org> Ian Clelland <clelland@gmail.com> + colin@owlfish.com crankycoder@gmail.com Pete Crosier <pete.crosier@gmail.com> Matt Croydon <http://www.postneo.com/> 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: |
