diff options
author | Andy McCurdy <andy@andymccurdy.com> | 2014-06-05 19:43:34 -0400 |
---|---|---|
committer | Andy McCurdy <andy@andymccurdy.com> | 2014-06-05 19:43:34 -0400 |
commit | d6fc144c8db08d087b67c919a49fdc1f87bb3cb5 (patch) | |
tree | d83325f032431b04392252cc932923b94e143418 | |
parent | e7589d76a20b577bbc65fbfcdb270435b24af444 (diff) | |
parent | 643d76d9af708f3dc5718be16b72f8a911e26d4f (diff) | |
download | redis-py-d6fc144c8db08d087b67c919a49fdc1f87bb3cb5.tar.gz |
Merge pull request #489 from dystedium/fixlock2
Lock.release(): reorder code to avoid token overwrite
-rw-r--r-- | redis/lock.py | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/redis/lock.py b/redis/lock.py index 8008d22..e6070c4 100644 --- a/redis/lock.py +++ b/redis/lock.py @@ -100,18 +100,16 @@ class Lock(object): "Releases the already acquired lock" if self.token is None: raise LockError("Cannot release an unlocked lock") - try: - self.do_release() - finally: - self.token = None + expected_token = self.token + self.token = None + self.do_release(expected_token) - def do_release(self): + def do_release(self, expected_token): name = self.name - token = self.token def execute_release(pipe): lock_value = pipe.get(name) - if lock_value != token: + if lock_value != expected_token: raise LockError("Cannot release a lock that's no longer owned") pipe.delete(name) @@ -229,9 +227,9 @@ class LuaLock(Lock): args=[token, timeout], client=self.redis)) - def do_release(self): + def do_release(self, expected_token): if not bool(self.lua_release(keys=[self.name], - args=[self.token], + args=[expected_token], client=self.redis)): raise LockError("Cannot release a lock that's no longer owned") |