summaryrefslogtreecommitdiff
path: root/redis/lock.py
diff options
context:
space:
mode:
authorAndy McCurdy <andy@andymccurdy.com>2019-01-02 13:22:29 -0800
committerAndy McCurdy <andy@andymccurdy.com>2019-01-02 13:22:29 -0800
commit6a6548ea99c2c4667ae0ab82fde056b2acde777b (patch)
tree5443a5c0078d09c865fecbecece3251f38363cc0 /redis/lock.py
parent15853dc45bf796d003b7b313d1d4821ae2c8218c (diff)
downloadredis-py-lock-owned.tar.gz
ensure token comparison is always comparing bytes objectslock-owned
Diffstat (limited to 'redis/lock.py')
-rw-r--r--redis/lock.py11
1 files changed, 10 insertions, 1 deletions
diff --git a/redis/lock.py b/redis/lock.py
index edf97d2..8d481d7 100644
--- a/redis/lock.py
+++ b/redis/lock.py
@@ -168,6 +168,9 @@ class Lock(object):
sleep = self.sleep
if token is None:
token = uuid.uuid1().hex.encode()
+ else:
+ encoder = self.redis.connection_pool.get_encoder()
+ token = encoder.encode(token)
if blocking is None:
blocking = self.blocking
if blocking_timeout is None:
@@ -205,8 +208,14 @@ class Lock(object):
"""
Returns True if this key is locked by this lock, otherwise False.
"""
+ stored_token = self.redis.get(self.name)
+ # need to always compare bytes to bytes
+ # TODO: this can be simplified when the context manager is finished
+ if stored_token and not isinstance(stored_token, bytes):
+ encoder = self.redis.connection_pool.get_encoder()
+ stored_token = encoder.encode(stored_token)
return self.local.token is not None and \
- self.redis.get(self.name) == self.local.token
+ stored_token == self.local.token
def release(self):
"Releases the already acquired lock"