Author: markt Date: Thu Aug 22 09:53:21 2013 New Revision: 1516400 URL: http://svn.apache.org/r1516400 Log: Refactor connections as upgraded connections will need to support multiple threads processing the same connection
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1425564,1425628 Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1516400&r1=1516399&r2=1516400&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java Thu Aug 22 09:53:21 2013 @@ -558,8 +558,7 @@ public abstract class AbstractProtocol i public SocketState process(SocketWrapper<S> wrapper, SocketStatus status) { S socket = wrapper.getSocket(); - - Processor<S> processor = connections.remove(socket); + Processor<S> processor = connections.get(socket); if (status == SocketStatus.DISCONNECT && processor == null) { //nothing more to be done endpoint requested a close @@ -646,22 +645,29 @@ public abstract class AbstractProtocol i // In the middle of processing a request/response. Keep the // socket associated with the processor. Exact requirements // depend on type of long poll + connections.put(socket, processor); longPoll(wrapper, processor); } else if (state == SocketState.OPEN) { // In keep-alive but between requests. OK to recycle // processor. Continue to poll for the next request. + connections.remove(processor); release(wrapper, processor, false, true); } else if (state == SocketState.SENDFILE) { // Sendfile in progress. If it fails, the socket will be // closed. If it works, the socket will be re-added to the // poller + connections.remove(processor); release(wrapper, processor, false, false); } else if (state == SocketState.UPGRADED) { // Need to keep the connection associated with the processor + connections.put(socket, processor); longPoll(wrapper, processor); } else { - // Connection closed. OK to recycle the processor. - if (!(processor instanceof org.apache.coyote.http11.upgrade.UpgradeProcessor)) { + // Connection closed. OK to recycle the processor. Upgrade + // processors are not recycled. + connections.remove(processor); + if (!(processor instanceof org.apache.coyote.http11.upgrade.UpgradeProcessor) + && !processor.isUpgrade()) { release(wrapper, processor, true, false); } } @@ -687,7 +693,8 @@ public abstract class AbstractProtocol i sm.getString("abstractConnectionHandler.error"), e); } // Don't try to add upgrade processors back into the pool - if (!(processor instanceof org.apache.coyote.http11.upgrade.UpgradeProcessor)) { + if (!(processor instanceof org.apache.coyote.http11.upgrade.UpgradeProcessor) + && !processor.isUpgrade()) { release(wrapper, processor, true, false); } return SocketState.CLOSED; Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java?rev=1516400&r1=1516399&r2=1516400&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProtocol.java Thu Aug 22 09:53:21 2013 @@ -86,7 +86,6 @@ public abstract class AbstractAjpProtoco protected void longPoll(SocketWrapper<S> socket, Processor<S> processor) { // Same requirements for all AJP connectors - connections.put(socket.getSocket(), processor); socket.setAsync(true); } Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java?rev=1516400&r1=1516399&r2=1516400&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11AprProtocol.java Thu Aug 22 09:53:21 2013 @@ -264,7 +264,6 @@ public class Http11AprProtocol extends A @Override protected void longPoll(SocketWrapper<Long> socket, Processor<Long> processor) { - connections.put(socket.getSocket(), processor); if (processor.isAsync()) { // Async Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?rev=1516400&r1=1516399&r2=1516400&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Thu Aug 22 09:53:21 2013 @@ -242,7 +242,6 @@ public class Http11NioProtocol extends A @Override protected void longPoll(SocketWrapper<NioChannel> socket, Processor<NioChannel> processor) { - connections.put(socket.getSocket(), processor); if (processor.isAsync()) { socket.setAsync(true); Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java?rev=1516400&r1=1516399&r2=1516400&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/http11/Http11Protocol.java Thu Aug 22 09:53:21 2013 @@ -157,7 +157,7 @@ public class Http11Protocol extends Abst @Override protected void longPoll(SocketWrapper<Socket> socket, Processor<Socket> processor) { - connections.put(socket.getSocket(), processor); + // NO-OP } @Override --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org