Author: remm Date: Mon Mar 10 16:22:07 2014 New Revision: 1575994 URL: http://svn.apache.org/r1575994 Log: Add code to do a clean close of all current connections.
Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNio2Protocol.java tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpNio2Protocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpNio2Protocol.java?rev=1575994&r1=1575993&r2=1575994&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/ajp/AjpNio2Protocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/ajp/AjpNio2Protocol.java Mon Mar 10 16:22:07 2014 @@ -25,6 +25,7 @@ import org.apache.juli.logging.LogFactor import org.apache.tomcat.util.net.AbstractEndpoint; import org.apache.tomcat.util.net.Nio2Channel; import org.apache.tomcat.util.net.Nio2Endpoint; +import org.apache.tomcat.util.net.SocketStatus; import org.apache.tomcat.util.net.Nio2Endpoint.Handler; import org.apache.tomcat.util.net.SSLImplementation; import org.apache.tomcat.util.net.SocketWrapper; @@ -154,5 +155,12 @@ public class AjpNio2Protocol extends Abs @Override public void onCreateSSLEngine(SSLEngine engine) { } + + @Override + public void closeAll() { + for (Nio2Channel channel : connections.keySet()) { + ((Nio2Endpoint) proto.endpoint).closeSocket(channel.getSocket(), SocketStatus.STOP); + } + } } } Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java?rev=1575994&r1=1575993&r2=1575994&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java (original) +++ tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Protocol.java Mon Mar 10 16:22:07 2014 @@ -274,5 +274,12 @@ public class Http11Nio2Protocol extends proto.npnHandler.onCreateEngine(engine); } } + + @Override + public void closeAll() { + for (Nio2Channel channel : connections.keySet()) { + ((Nio2Endpoint) proto.endpoint).closeSocket(channel.getSocket(), SocketStatus.STOP); + } + } } } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java?rev=1575994&r1=1575993&r2=1575994&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java Mon Mar 10 16:22:07 2014 @@ -38,6 +38,7 @@ public class Nio2Channel implements Asyn protected static ByteBuffer emptyBuf = ByteBuffer.allocate(0); protected AsynchronousSocketChannel sc = null; + protected SocketWrapper<Nio2Channel> socket = null; protected ApplicationBufferHandler bufHandler; @@ -56,7 +57,16 @@ public class Nio2Channel implements Asyn public void reset() throws IOException { bufHandler.getReadBuffer().clear(); bufHandler.getWriteBuffer().clear(); - this.sendFile = false; + sendFile = false; + socket = null; + } + + void setSocket(SocketWrapper<Nio2Channel> socket) { + this.socket = socket; + } + + public SocketWrapper<Nio2Channel> getSocket() { + return socket; } public int getBufferSize() { Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1575994&r1=1575993&r2=1575994&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Mon Mar 10 16:22:07 2014 @@ -383,6 +383,11 @@ public class Nio2Endpoint extends Abstra running = false; unlockAccept(); } + try { + handler.closeAll(); + } catch (Throwable t) { + ExceptionUtils.handleThrowable(t); + } if (useCaches) { socketWrapperCache.clear(); nioChannels.clear(); @@ -488,9 +493,7 @@ public class Nio2Endpoint extends Abstra socketWrapper.reset(channel, getSocketProperties().getSoTimeout()); socketWrapper.setKeepAliveLeft(Nio2Endpoint.this.getMaxKeepAliveRequests()); socketWrapper.setSecure(isSSLEnabled()); - if (sslContext != null) { - ((SecureNio2Channel) channel).setSocket(socketWrapper); - } + channel.setSocket(socketWrapper); processSocket(socketWrapper, SocketStatus.OPEN_READ, true); // FIXME: In theory, awaitBytes is better, but the SSL handshake is done by processSocket //awaitBytes(socketWrapper); @@ -898,6 +901,7 @@ public class Nio2Endpoint extends Abstra public SocketState process(SocketWrapper<Nio2Channel> socket, SocketStatus status); public void release(SocketWrapper<Nio2Channel> socket); + public void closeAll(); public SSLImplementation getSslImplementation(); public void onCreateSSLEngine(SSLEngine engine); } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java?rev=1575994&r1=1575993&r2=1575994&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java Mon Mar 10 16:22:07 2014 @@ -43,7 +43,6 @@ public class SecureNio2Channel extends N protected SSLEngine sslEngine; protected final Nio2Endpoint endpoint; - protected SocketWrapper<Nio2Channel> socket; protected boolean handshakeComplete = false; protected HandshakeStatus handshakeStatus; //gets set by handshake @@ -103,10 +102,6 @@ public class SecureNio2Channel extends N reset(); } - void setSocket(SocketWrapper<Nio2Channel> socket) { - this.socket = socket; - } - public void reset(SSLEngine engine) throws IOException { this.sslEngine = engine; reset(); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org