You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/08/22 11:53:22 UTC

svn commit: r1516400 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/coyote/ java/org/apache/coyote/ajp/ java/org/apache/coyote/http11/

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