From ec8f441ea6b62f30ef1011b91af76fff6eda3277 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 28 Aug 2008 11:49:22 +0000 Subject: [PATCH] Improved selector loop shutdown time --- .../channel/socket/nio/NioClientSocketPipelineSink.java | 5 ++++- .../java/org/jboss/netty/channel/socket/nio/NioWorker.java | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioClientSocketPipelineSink.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioClientSocketPipelineSink.java index 2257316636..6bf2c59ab6 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioClientSocketPipelineSink.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioClientSocketPipelineSink.java @@ -32,6 +32,7 @@ import java.nio.channels.Selector; import java.util.Iterator; import java.util.Set; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -228,7 +229,9 @@ class NioClientSocketPipelineSink extends AbstractChannelSink { // connection attempts are made in a one-by-one manner // instead of concurrent manner. if (selector.keys().isEmpty()) { - if (shutdown) { + if (shutdown || + bossExecutor instanceof ExecutorService && ((ExecutorService) bossExecutor).isShutdown()) { + synchronized (selectorGuard) { if (selector.keys().isEmpty()) { try { diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java index 52eb89361b..f6022d139d 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java @@ -32,6 +32,7 @@ import java.nio.channels.Selector; import java.util.Iterator; import java.util.Set; import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; import java.util.concurrent.atomic.AtomicBoolean; import org.jboss.netty.buffer.ChannelBuffer; @@ -154,7 +155,8 @@ class NioWorker implements Runnable { // connections are registered in a one-by-one manner instead of // concurrent manner. if (selector.keys().isEmpty()) { - if (shutdown) { + if (shutdown || + executor instanceof ExecutorService && ((ExecutorService) executor).isShutdown()) { synchronized (selectorGuard) { if (selector.keys().isEmpty()) { try {