diff options
Diffstat (limited to 'django/core/cache')
| -rw-r--r-- | django/core/cache/backends/filebased.py | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/django/core/cache/backends/filebased.py b/django/core/cache/backends/filebased.py index 91f0b78fa6..fe833336d0 100644 --- a/django/core/cache/backends/filebased.py +++ b/django/core/cache/backends/filebased.py @@ -42,13 +42,15 @@ class CacheClass(BaseCache): fname = self._key_to_file(key) try: f = open(fname, 'rb') - exp = pickle.load(f) - now = time.time() - if exp < now: + try: + exp = pickle.load(f) + now = time.time() + if exp < now: + self._delete(fname) + else: + return pickle.load(f) + finally: f.close() - self._delete(fname) - else: - return pickle.load(f) except (IOError, OSError, EOFError, pickle.PickleError): pass return default @@ -67,9 +69,12 @@ class CacheClass(BaseCache): os.makedirs(dirname) f = open(fname, 'wb') - now = time.time() - pickle.dump(now + timeout, f, pickle.HIGHEST_PROTOCOL) - pickle.dump(value, f, pickle.HIGHEST_PROTOCOL) + try: + now = time.time() + pickle.dump(now + timeout, f, pickle.HIGHEST_PROTOCOL) + pickle.dump(value, f, pickle.HIGHEST_PROTOCOL) + finally: + f.close() except (IOError, OSError): pass @@ -93,14 +98,16 @@ class CacheClass(BaseCache): fname = self._key_to_file(key) try: f = open(fname, 'rb') - exp = pickle.load(f) - now = time.time() - if exp < now: + try: + exp = pickle.load(f) + now = time.time() + if exp < now: + self._delete(fname) + return False + else: + return True + finally: f.close() - self._delete(fname) - return False - else: - return True except (IOError, OSError, EOFError, pickle.PickleError): return False |
