From a0b652ccb63fd824ec282e959d6fbeb0eaae3e02 Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 1 Jul 2016 13:48:29 +0300 Subject: [PATCH] sync added for proper listener remove in handleBlockingOperations method --- .../org/redisson/command/CommandAsyncService.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/redisson/command/CommandAsyncService.java b/src/main/java/org/redisson/command/CommandAsyncService.java index 3d8fd537b..e75a6d6c2 100644 --- a/src/main/java/org/redisson/command/CommandAsyncService.java +++ b/src/main/java/org/redisson/command/CommandAsyncService.java @@ -554,7 +554,11 @@ public class CommandAsyncService implements CommandAsyncExecutor { if (scheduledFuture != null) { scheduledFuture.cancel(false); } - connectionManager.getShutdownPromise().removeListener(listener); + + synchronized (listener) { + connectionManager.getShutdownPromise().removeListener(listener); + } + // handling cancel operation for commands from skipTimeout collection if ((future.isCancelled() && details.getAttemptPromise().cancel(true)) || canceledByScheduler.get()) { @@ -579,7 +583,11 @@ public class CommandAsyncService implements CommandAsyncExecutor { } }); - connectionManager.getShutdownPromise().addListener(listener); + synchronized (listener) { + if (!details.getMainPromise().isDone()) { + connectionManager.getShutdownPromise().addListener(listener); + } + } } private void checkConnectionFuture(final NodeSource source,