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