From 32cfddc34ca0b6bcaa80646eaba1e8866c258fc5 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Fri, 24 Apr 2026 10:13:00 +0200 Subject: [PATCH] LRUCache fixes fix: resolve KeyError and memory leaks in LRUCache - __setitem__: assign value before popping from _lru to avoid KeyError when exceeding capacity. - clear(): clear the _lru list also to prevent stale keys causing KeyErrors during future evictions. --- src/borg/lrucache.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/borg/lrucache.py b/src/borg/lrucache.py index 9fa2addf8..a7cbdca1f 100644 --- a/src/borg/lrucache.py +++ b/src/borg/lrucache.py @@ -12,10 +12,10 @@ class LRUCache: assert key not in self._cache, ( "Unexpected attempt to replace a cached item," " without first deleting the old item.") + self._cache[key] = value self._lru.append(key) while len(self._lru) > self._capacity: del self[self._lru[0]] - self._cache[key] = value def __getitem__(self, key): value = self._cache[key] # raise KeyError if not found @@ -49,6 +49,7 @@ class LRUCache: for value in self._cache.values(): self._dispose(value) self._cache.clear() + self._lru.clear() def items(self): return self._cache.items()