Commit 29ff461c authored by Andrew M. Kuchling's avatar Andrew M. Kuchling

[Patch #1587139 by kxroberto] Protect lock acquisition/release with

try...finally to ensure the lock is always released.  This could use
the 'with' statement, but the patch uses 'finally'.

2.5 backport candidate.
parent c911e916
......@@ -1316,6 +1316,7 @@ class CookieJar:
"""
_debug("add_cookie_header")
self._cookies_lock.acquire()
try:
self._policy._now = self._now = int(time.time())
......@@ -1335,6 +1336,7 @@ class CookieJar:
request.add_unredirected_header("Cookie2", '$Version="1"')
break
finally:
self._cookies_lock.release()
self.clear_expired_cookies()
......@@ -1602,11 +1604,14 @@ class CookieJar:
def set_cookie_if_ok(self, cookie, request):
"""Set a cookie if policy says it's OK to do so."""
self._cookies_lock.acquire()
try:
self._policy._now = self._now = int(time.time())
if self._policy.set_ok(cookie, request):
self.set_cookie(cookie)
finally:
self._cookies_lock.release()
def set_cookie(self, cookie):
......@@ -1626,12 +1631,14 @@ class CookieJar:
"""Extract cookies from response, where allowable given the request."""
_debug("extract_cookies: %s", response.info())
self._cookies_lock.acquire()
try:
self._policy._now = self._now = int(time.time())
for cookie in self.make_cookies(response, request):
if self._policy.set_ok(cookie, request):
_debug(" setting cookie: %s", cookie)
self.set_cookie(cookie)
finally:
self._cookies_lock.release()
def clear(self, domain=None, path=None, name=None):
......@@ -1669,9 +1676,11 @@ class CookieJar:
"""
self._cookies_lock.acquire()
try:
for cookie in self:
if cookie.discard:
self.clear(cookie.domain, cookie.path, cookie.name)
finally:
self._cookies_lock.release()
def clear_expired_cookies(self):
......@@ -1685,10 +1694,12 @@ class CookieJar:
"""
self._cookies_lock.acquire()
try:
now = time.time()
for cookie in self:
if cookie.is_expired(now):
self.clear(cookie.domain, cookie.path, cookie.name)
finally:
self._cookies_lock.release()
def __iter__(self):
......@@ -1761,6 +1772,7 @@ class FileCookieJar(CookieJar):
else: raise ValueError(MISSING_FILENAME_TEXT)
self._cookies_lock.acquire()
try:
old_state = copy.deepcopy(self._cookies)
self._cookies = {}
......@@ -1770,6 +1782,7 @@ class FileCookieJar(CookieJar):
self._cookies = old_state
raise
finally:
self._cookies_lock.release()
from _LWPCookieJar import LWPCookieJar, lwp_cookie_str
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment