diff options
-rw-r--r-- | redis/lock.py | 11 | ||||
-rw-r--r-- | tests/test_lock.py | 2 |
2 files changed, 11 insertions, 2 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" diff --git a/tests/test_lock.py b/tests/test_lock.py index f8218f6..f92afec 100644 --- a/tests/test_lock.py +++ b/tests/test_lock.py @@ -28,7 +28,7 @@ class TestLock(object): lock = self.get_lock(r, 'foo') assert lock.acquire(blocking=False, token='test') assert r.get('foo') == b'test' - assert lock.local.token == 'test' + assert lock.local.token == b'test' assert r.ttl('foo') == -1 lock.release() assert r.get('foo') is None |