From d35542c5d2a00f3efbb5ee1ca758bc9db7ecbb0e Mon Sep 17 00:00:00 2001 From: Mario Rugiero Date: Wed, 26 Jun 2024 04:05:56 -0300 Subject: [PATCH] Remove incref call from `LRU_popiten` The `result` object already gets its count increased inside `LRU_peek_*_item`, so doing it twice causes a memory leak. --- src/lru/_lru.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lru/_lru.c b/src/lru/_lru.c index a908d9a..6738c84 100644 --- a/src/lru/_lru.c +++ b/src/lru/_lru.c @@ -494,6 +494,7 @@ LRU_popitem(LRU *self, PyObject *args, PyObject *kwds) return NULL; } #endif + // NOTE: `LRU_peek_*` increases `result` refcnt before returning it. if (pop_least_recent) result = LRU_peek_last_item(self); else @@ -503,7 +504,6 @@ LRU_popitem(LRU *self, PyObject *args, PyObject *kwds) return NULL; } lru_ass_sub(self, PyTuple_GET_ITEM(result, 0), NULL); - Py_INCREF(result); return result; }