From 4b14a87463d4035a2c6f7061f6a51b3ca542bba1 Mon Sep 17 00:00:00 2001 From: Bernard Letourmy Date: Tue, 12 May 2015 09:12:28 +0800 Subject: [PATCH] fixes #966 - deadlock in cache.disk --- gluon/cache.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/gluon/cache.py b/gluon/cache.py index f94937d8..ba3ea534 100644 --- a/gluon/cache.py +++ b/gluon/cache.py @@ -473,9 +473,14 @@ class CacheOnDisk(CacheAbstract): if item and ((dt is None) or (item[0] > now - dt)): value = item[1] else: - value = f() + try: + value = f() + except: + self.storage.release(CacheAbstract.cache_stats_name) + self.storage.release(key) + raise self.storage[key] = (now, value) - self.storage.safe_apply(CacheAbstract.cache_stats_name, inc_misses, + self.storage.safe_apply(CacheAbstract.cache_stats_name, inc_misses, default_value={'hit_total': 0, 'misses': 0}) self.storage.release(CacheAbstract.cache_stats_name)