Skip to content

Commit 677b99c

Browse files
moshego189Dreamsorcerer
authored andcommitted
fix: prevent memory leak in _redlock_release of SimpleMemoryBackend (#807)
1 parent f9156e3 commit 677b99c

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

aiocache/backends/memory.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ async def _raw(self, command, *args, encoding="utf-8", _conn=None, **kwargs):
9393

9494
async def _redlock_release(self, key, value):
9595
if self._cache.get(key) == value:
96-
self._cache.pop(key)
97-
return 1
96+
return self.__delete(key)
9897
return 0
9998

10099
def __delete(self, key):

tests/ut/backends/test_memory.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,9 +173,13 @@ async def test_raw(self, memory):
173173

174174
async def test_redlock_release(self, memory):
175175
memory._cache.get.return_value = "lock"
176+
fake = create_autospec(asyncio.TimerHandle, instance=True)
177+
memory._handlers[Keys.KEY] = fake
176178
assert await memory._redlock_release(Keys.KEY, "lock") == 1
177179
memory._cache.get.assert_called_with(Keys.KEY)
178-
memory._cache.pop.assert_called_with(Keys.KEY)
180+
memory._cache.pop.assert_called_with(Keys.KEY, None)
181+
assert fake.cancel.call_count == 1
182+
assert Keys.KEY not in memory._handlers
179183

180184
async def test_redlock_release_nokey(self, memory):
181185
memory._cache.get.return_value = None

0 commit comments

Comments
 (0)