summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-12 07:37:37 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-12 07:37:37 +0000
commita02247ff73c14a79b344faaaa865d7d57d755cb1 (patch)
tree8013b4a67e981bc3fbab627082cb9c91c36b8a93
parentfdde600f42a9e5ba72f7cc0b1e84571bed477e03 (diff)
[1.0.X] Fixed #10472 -- Fixed a race condition in reverse URL resolving.
This only shows up in for reverse() (not forwards resolving), since that path uses a globally shared resolver object. Based on a patch from Travis Terry. Backport of r10037 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@10039 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--AUTHORS1
-rw-r--r--django/core/urlresolvers.py8
2 files changed, 6 insertions, 3 deletions
diff --git a/AUTHORS b/AUTHORS
index 0ed198ec92..90e52c7d0c 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -393,6 +393,7 @@ answer newbie questions, and generally made Django that much better:
Frank Tegtmeyer <fte@fte.to>
Marcel Telka <marcel@telka.sk>
Terry Huang <terryh.tp@gmail.com>
+ Travis Terry <tdterry7@gmail.com>
thebjorn <bp@datakortet.no>
Zach Thompson <zthompson47@gmail.com>
Michael Thornhill
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index 774e6d3b42..c61cdde65a 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -152,6 +152,7 @@ class RegexURLResolver(object):
def _get_reverse_dict(self):
if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'):
+ lookups = MultiValueDict()
for pattern in reversed(self.urlconf_module.urlpatterns):
p_pattern = pattern.regex.pattern
if p_pattern.startswith('^'):
@@ -163,11 +164,12 @@ class RegexURLResolver(object):
new_matches = []
for piece, p_args in parent:
new_matches.extend([(piece + suffix, p_args + args) for (suffix, args) in matches])
- self._reverse_dict.appendlist(name, (new_matches, p_pattern + pat))
+ lookups.appendlist(name, (new_matches, p_pattern + pat))
else:
bits = normalize(p_pattern)
- self._reverse_dict.appendlist(pattern.callback, (bits, p_pattern))
- self._reverse_dict.appendlist(pattern.name, (bits, p_pattern))
+ lookups.appendlist(pattern.callback, (bits, p_pattern))
+ lookups.appendlist(pattern.name, (bits, p_pattern))
+ self._reverse_dict = lookups
return self._reverse_dict
reverse_dict = property(_get_reverse_dict)