From a8a1ce71534ced9727609624928b510acb51f0e1 Mon Sep 17 00:00:00 2001 From: Xiangzhuang Shen Date: Thu, 27 Feb 2025 17:27:21 +0800 Subject: [PATCH 1/4] fix(lock): raise LockNotOwnedError when release a lock from non-owned thread --- redis/lock.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/redis/lock.py b/redis/lock.py index f44ed629da..7d77bafb95 100644 --- a/redis/lock.py +++ b/redis/lock.py @@ -251,7 +251,13 @@ def release(self) -> None: """ expected_token = self.local.token if expected_token is None: - raise LockError("Cannot release an unlocked lock", lock_name=self.name) + if self.owned(): + raise LockError("Cannot release an unlocked lock", lock_name=self.name) + else: + raise LockNotOwnedError( + "Cannot release a lock that's no longer owned", + lock_name=self.name, + ) self.local.token = None self.do_release(expected_token) From 3b64e66df2958a080c5c657b92af0b1fd05cc58a Mon Sep 17 00:00:00 2001 From: Xiangzhuang Shen Date: Sat, 1 Mar 2025 08:29:17 +0800 Subject: [PATCH 2/4] change: error raise --- redis/lock.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/redis/lock.py b/redis/lock.py index 7d77bafb95..29c3614822 100644 --- a/redis/lock.py +++ b/redis/lock.py @@ -251,13 +251,7 @@ def release(self) -> None: """ expected_token = self.local.token if expected_token is None: - if self.owned(): - raise LockError("Cannot release an unlocked lock", lock_name=self.name) - else: - raise LockNotOwnedError( - "Cannot release a lock that's no longer owned", - lock_name=self.name, - ) + raise LockError("Cannot release a lock that's not owned or is already unlocked.", lock_name=self.name) self.local.token = None self.do_release(expected_token) From 6e782ac47388acef38db8d83b22ec9cb5c370a55 Mon Sep 17 00:00:00 2001 From: Xiangzhuang Shen Date: Mon, 3 Mar 2025 22:25:52 +0800 Subject: [PATCH 3/4] fix: linter --- redis/lock.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/redis/lock.py b/redis/lock.py index 29c3614822..7a1becb30a 100644 --- a/redis/lock.py +++ b/redis/lock.py @@ -251,7 +251,10 @@ def release(self) -> None: """ expected_token = self.local.token if expected_token is None: - raise LockError("Cannot release a lock that's not owned or is already unlocked.", lock_name=self.name) + raise LockError( + "Cannot release a lock that's not owned or is already unlocked.", + lock_name=self.name, + ) self.local.token = None self.do_release(expected_token) From 1468b1359c4509c2269166b6b02922d4675f2bf6 Mon Sep 17 00:00:00 2001 From: Xiangzhuang Shen Date: Tue, 4 Mar 2025 10:05:43 +0800 Subject: [PATCH 4/4] fix(lock): async release --- redis/asyncio/lock.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/redis/asyncio/lock.py b/redis/asyncio/lock.py index e1d11a882d..bb2cccab52 100644 --- a/redis/asyncio/lock.py +++ b/redis/asyncio/lock.py @@ -249,7 +249,10 @@ def release(self) -> Awaitable[None]: """Releases the already acquired lock""" expected_token = self.local.token if expected_token is None: - raise LockError("Cannot release an unlocked lock") + raise LockError( + "Cannot release a lock that's not owned or is already unlocked.", + lock_name=self.name, + ) self.local.token = None return self.do_release(expected_token)