diff options
| author | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2009-03-12 07:28:22 +0000 |
|---|---|---|
| committer | Malcolm Tredinnick <malcolm.tredinnick@gmail.com> | 2009-03-12 07:28:22 +0000 |
| commit | fb729cf1d999423721342c3dc6dfb58d48ed5389 (patch) | |
| tree | 7ffa60c4d964baa62d7a2c650e97173691155201 | |
| parent | 6483fdf1fadf5f577fc7eef07bb4ec5c920e44f8 (diff) | |
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.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10037 bcc190cf-cafb-0310-a4f2-bffc1f526a37
| -rw-r--r-- | AUTHORS | 1 | ||||
| -rw-r--r-- | django/core/urlresolvers.py | 8 |
2 files changed, 6 insertions, 3 deletions
@@ -402,6 +402,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 59dcdcb491..fba6bb22e8 100644 --- a/django/core/urlresolvers.py +++ b/django/core/urlresolvers.py @@ -154,6 +154,7 @@ class RegexURLResolver(object): def _get_reverse_dict(self): if not self._reverse_dict: + lookups = MultiValueDict() for pattern in reversed(self.url_patterns): p_pattern = pattern.regex.pattern if p_pattern.startswith('^'): @@ -165,11 +166,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) |
