diff --git a/redisson/src/main/java/org/redisson/client/RedisConnection.java b/redisson/src/main/java/org/redisson/client/RedisConnection.java index fd74658b2..65c2ed36a 100644 --- a/redisson/src/main/java/org/redisson/client/RedisConnection.java +++ b/redisson/src/main/java/org/redisson/client/RedisConnection.java @@ -249,7 +249,8 @@ public class RedisConnection implements RedisCommands { private void close() { CommandData command = getCurrentCommand(); if (!isActive() - || (command != null && command.isBlockingCommand())) { + || (command != null && command.isBlockingCommand()) + || !connectionPromise.isDone()) { channel.close(); } else { RFuture f = async(RedisCommands.QUIT); diff --git a/redisson/src/main/java/org/redisson/client/handler/RedisChannelInitializer.java b/redisson/src/main/java/org/redisson/client/handler/RedisChannelInitializer.java index a6be4693a..371fa6001 100644 --- a/redisson/src/main/java/org/redisson/client/handler/RedisChannelInitializer.java +++ b/redisson/src/main/java/org/redisson/client/handler/RedisChannelInitializer.java @@ -201,6 +201,7 @@ public class RedisChannelInitializer extends ChannelInitializer { ctx.fireChannelActive(); } else { RedisConnection connection = RedisConnection.getFrom(ctx.channel()); + connection.closeAsync(); connection.getConnectionPromise().tryFailure(e.cause()); } }