You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2014/03/10 17:22:07 UTC

svn commit: r1575994 - in /tomcat/trunk/java/org/apache: coyote/ajp/AjpNio2Protocol.java coyote/http11/Http11Nio2Protocol.java tomcat/util/net/Nio2Channel.java tomcat/util/net/Nio2Endpoint.java tomcat/util/net/SecureNio2Channel.java

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org