Erik Johnston 3 years ago
parent
commit
d088695f15
1 changed files with 14 additions and 9 deletions
  1. 14 9
      synapse/util/caches/lrucache.py

+ 14 - 9
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)