[Bug][RadixTree] Fix LRU list reference cycle leak in radix_cache (#25770)

Co-authored-by: zhangjiadong1@corp.netease.com <zhangjiadong1@corp.netease.com>
This commit is contained in:
Mark Smith
2026-05-21 01:06:05 +08:00
committed by GitHub
co-authored by zhangjiadong1@corp.netease.com
parent 6e0b7f35ad
commit 33c57b8716
3 changed files with 9 additions and 0 deletions
@@ -204,6 +204,9 @@ class LRUList:
setattr(
getattr(node, self.nxt), self.prv, getattr(node, self.prv)
) # node.next.prev = node.prev
# Clear self pointers to break reference cycles among evicted nodes.
setattr(node, self.prv, None)
setattr(node, self.nxt, None)
def _get_lru(self) -> Optional[TreeNode]:
"""
@@ -157,6 +157,9 @@ class LRUList:
setattr(
getattr(node, self.nxt), self.prv, getattr(node, self.prv)
) # node.next.prev = node.prev
# Clear self pointers to break reference cycles among evicted nodes.
setattr(node, self.prv, None)
setattr(node, self.nxt, None)
def _get_lru(self) -> Optional[TreeNode]:
"""
@@ -124,6 +124,9 @@ class UnifiedLRUList:
pt = self._pt
node.lru_prev[pt].lru_next[pt] = node.lru_next[pt]
node.lru_next[pt].lru_prev[pt] = node.lru_prev[pt]
# Clear self pointers to break reference cycles among evicted nodes.
node.lru_prev[pt] = None
node.lru_next[pt] = None
def insert_mru(self, node: UnifiedTreeNode):
assert node.id not in self.cache