diff --git a/Lib/cookielib.py b/Lib/cookielib.py
index e8fee0e..ce037b0 100644
--- a/Lib/cookielib.py
+++ b/Lib/cookielib.py
@@ -1316,26 +1316,28 @@
         """
         _debug("add_cookie_header")
         self._cookies_lock.acquire()
+        try:
 
-        self._policy._now = self._now = int(time.time())
+           self._policy._now = self._now = int(time.time())
 
-        cookies = self._cookies_for_request(request)
+           cookies = self._cookies_for_request(request)
 
-        attrs = self._cookie_attrs(cookies)
-        if attrs:
-            if not request.has_header("Cookie"):
-                request.add_unredirected_header(
-                    "Cookie", "; ".join(attrs))
+           attrs = self._cookie_attrs(cookies)
+           if attrs:
+               if not request.has_header("Cookie"):
+                   request.add_unredirected_header(
+                       "Cookie", "; ".join(attrs))
 
-        # if necessary, advertise that we know RFC 2965
-        if (self._policy.rfc2965 and not self._policy.hide_cookie2 and
-            not request.has_header("Cookie2")):
-            for cookie in cookies:
-                if cookie.version != 1:
-                    request.add_unredirected_header("Cookie2", '$Version="1"')
-                    break
-
-        self._cookies_lock.release()
+           # if necessary, advertise that we know RFC 2965
+           if (self._policy.rfc2965 and not self._policy.hide_cookie2 and
+               not request.has_header("Cookie2")):
+               for cookie in cookies:
+                   if cookie.version != 1:
+                       request.add_unredirected_header("Cookie2", '$Version="1"')
+                       break
+   
+        finally:
+           self._cookies_lock.release()
 
         self.clear_expired_cookies()
 
@@ -1602,12 +1604,15 @@
     def set_cookie_if_ok(self, cookie, request):
         """Set a cookie if policy says it's OK to do so."""
         self._cookies_lock.acquire()
-        self._policy._now = self._now = int(time.time())
+        try:
+            self._policy._now = self._now = int(time.time())
 
-        if self._policy.set_ok(cookie, request):
-            self.set_cookie(cookie)
+            if self._policy.set_ok(cookie, request):
+                self.set_cookie(cookie)
+         
 
-        self._cookies_lock.release()
+        finally:
+            self._cookies_lock.release()
 
     def set_cookie(self, cookie):
         """Set a cookie, without checking whether or not it should be set."""
@@ -1626,13 +1631,15 @@
         """Extract cookies from response, where allowable given the request."""
         _debug("extract_cookies: %s", response.info())
         self._cookies_lock.acquire()
-        self._policy._now = self._now = int(time.time())
+        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)
-        self._cookies_lock.release()
+           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):
         """Clear some cookies.
@@ -1669,10 +1676,12 @@
 
         """
         self._cookies_lock.acquire()
-        for cookie in self:
-            if cookie.discard:
-                self.clear(cookie.domain, cookie.path, cookie.name)
-        self._cookies_lock.release()
+        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):
         """Discard all expired cookies.
@@ -1685,11 +1694,13 @@
 
         """
         self._cookies_lock.acquire()
-        now = time.time()
-        for cookie in self:
-            if cookie.is_expired(now):
-                self.clear(cookie.domain, cookie.path, cookie.name)
-        self._cookies_lock.release()
+        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):
         return deepvalues(self._cookies)
@@ -1761,16 +1772,18 @@
             else: raise ValueError(MISSING_FILENAME_TEXT)
 
         self._cookies_lock.acquire()
-
-        old_state = copy.deepcopy(self._cookies)
-        self._cookies = {}
         try:
-            self.load(filename, ignore_discard, ignore_expires)
-        except (LoadError, IOError):
-            self._cookies = old_state
-            raise
 
-        self._cookies_lock.release()
+           old_state = copy.deepcopy(self._cookies)
+           self._cookies = {}
+           try:
+               self.load(filename, ignore_discard, ignore_expires)
+           except (LoadError, IOError):
+               self._cookies = old_state
+               raise
+
+        finally:
+           self._cookies_lock.release()
 
 from _LWPCookieJar import LWPCookieJar, lwp_cookie_str
 from _MozillaCookieJar import MozillaCookieJar
