diff --git a/redisson/src/main/java/org/redisson/client/RedisClient.java b/redisson/src/main/java/org/redisson/client/RedisClient.java index c1e37c785..3b060a000 100644 --- a/redisson/src/main/java/org/redisson/client/RedisClient.java +++ b/redisson/src/main/java/org/redisson/client/RedisClient.java @@ -151,6 +151,10 @@ public final class RedisClient { return config; } + public Timer getTimer() { + return timer; + } + public RedisConnection connect() { try { return connectAsync().syncUninterruptibly().getNow(); @@ -311,7 +315,12 @@ public final class RedisClient { } public RFuture shutdownAsync() { - final RPromise result = new RedissonPromise(); + RPromise result = new RedissonPromise(); + if (channels.isEmpty()) { + shutdown(result); + return result; + } + ChannelGroupFuture channelsFuture = channels.newCloseFuture(); channelsFuture.addListener(new FutureListener() { @Override @@ -321,39 +330,7 @@ public final class RedisClient { return; } - if (!hasOwnTimer && !hasOwnExecutor && !hasOwnResolver && !hasOwnGroup) { - result.trySuccess(null); - return; - } - - Thread t = new Thread() { - @Override - public void run() { - try { - if (hasOwnTimer) { - timer.stop(); - } - - if (hasOwnExecutor) { - executor.shutdown(); - executor.awaitTermination(15, TimeUnit.SECONDS); - } - - if (hasOwnResolver) { - bootstrap.config().resolver().close(); - } - if (hasOwnGroup) { - bootstrap.config().group().shutdownGracefully(); - } - } catch (Exception e) { - result.tryFailure(e); - return; - } - - result.trySuccess(null); - } - }; - t.start(); + shutdown(result); } }); @@ -363,10 +340,45 @@ public final class RedisClient { connection.closeAsync(); } } - + return result; } + private void shutdown(RPromise result) { + if (!hasOwnTimer && !hasOwnExecutor && !hasOwnResolver && !hasOwnGroup) { + result.trySuccess(null); + } else { + Thread t = new Thread() { + @Override + public void run() { + try { + if (hasOwnTimer) { + timer.stop(); + } + + if (hasOwnExecutor) { + executor.shutdown(); + executor.awaitTermination(15, TimeUnit.SECONDS); + } + + if (hasOwnResolver) { + bootstrap.config().resolver().close(); + } + if (hasOwnGroup) { + bootstrap.config().group().shutdownGracefully(); + } + } catch (Exception e) { + result.tryFailure(e); + return; + } + + result.trySuccess(null); + } + }; + t.start(); + } + } + @Override public String toString() { return "[addr=" + uri + "]";