diff --git a/src/main/java/org/redisson/RedissonLock.java b/src/main/java/org/redisson/RedissonLock.java index 6ebb55133..52e96a861 100644 --- a/src/main/java/org/redisson/RedissonLock.java +++ b/src/main/java/org/redisson/RedissonLock.java @@ -230,6 +230,14 @@ public class RedissonLock extends RedissonExpirable implements RLock { Future future = subscribe(); if (!future.await(time, TimeUnit.MILLISECONDS)) { + future.addListener(new FutureListener() { + @Override + public void operationComplete(Future future) throws Exception { + if (future.isSuccess()) { + unsubscribe(future); + } + } + }); return false; } @@ -565,7 +573,7 @@ public class RedissonLock extends RedissonExpirable implements RLock { @Override public void operationComplete(Future future) throws Exception { if (!future.isSuccess()) { - result.setFailure(future.cause()); + result.tryFailure(future.cause()); return; } @@ -600,7 +608,7 @@ public class RedissonLock extends RedissonExpirable implements RLock { public void operationComplete(Future future) throws Exception { if (!future.isSuccess()) { unsubscribe(subscribeFuture); - result.setFailure(future.cause()); + result.tryFailure(future.cause()); return; } @@ -608,7 +616,7 @@ public class RedissonLock extends RedissonExpirable implements RLock { // lock acquired if (ttl == null) { unsubscribe(subscribeFuture); - result.setSuccess(null); + result.trySuccess(null); return; }