diff options
Diffstat (limited to 'redis/lock.py')
-rw-r--r-- | redis/lock.py | 11 |
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" |