1 files changed, 14 insertions, 9 deletions
diff --git a/synapse/util/caches/lrucache.py b/synapse/util/caches/lrucache.py
index d0767c269d..e0749ac8a2 100644
--- a/synapse/util/caches/lrucache.py
+++ b/synapse/util/caches/lrucache.py
@@ -176,25 +176,30 @@ class LruCache(Generic[KT, VT]):
def evict():
ten_minutes_ago = int(reactor.seconds()) - 10 * 60
+ while cache_len() > self.max_size:
+ todelete = list_root.prev_node
+ evicted_len = delete_node(todelete)
+ cache.pop(todelete.key, None)
+ if metrics:
+ metrics.inc_evictions(evicted_len)
+
todelete = list_root.prev_node
- while (
- cache_len() > self.max_size
- or 0 < todelete.allocated_ts < ten_minutes_ago + 60
- ):
+ while 0 < todelete.allocated_ts < ten_minutes_ago + 60:
+ if list_root == todelete:
+ break
+
if 0 < todelete.allocated_ts < ten_minutes_ago:
- todelete = list_root.prev_node
+ todelete = todelete.prev_node
continue
- todelete = list_root.prev_node
- if list_root == todelete:
- break
+ next_todelete = todelete.prev_node
evicted_len = delete_node(todelete)
cache.pop(todelete.key, None)
if metrics:
metrics.inc_evictions(evicted_len)
- todelete = list_root.prev_node
+ todelete = next_todelete
def synchronized(f: FT) -> FT:
@wraps(f)
|