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 2015/11/26 21:53:26 UTC

svn commit: r1716766 - in /tomcat/trunk/java/org/apache: coyote/AbstractProcessorLight.java coyote/AsyncStateMachine.java tomcat/util/net/AbstractEndpoint.java

Author: markt
Date: Thu Nov 26 20:53:26 2015
New Revision: 1716766

URL: http://svn.apache.org/viewvc?rev=1716766&view=rev
Log:
Complete a TODO.
Remove the hack that added ASYNC_END as a SocketState.
Simplify processing loop.

Modified:
    tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java
    tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java
    tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java?rev=1716766&r1=1716765&r2=1716766&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java Thu Nov 26 20:53:26 2015
@@ -54,16 +54,6 @@ public abstract class AbstractProcessorL
                 // Do nothing here, just wait for it to get recycled
             } else if (isAsync() || isUpgrade()) {
                 state = dispatch(status);
-            } else if (state == SocketState.ASYNC_END) {
-                state = dispatch(status);
-                if (state == SocketState.OPEN) {
-                    // There may be pipe-lined data to read. If the data
-                    // isn't processed now, execution will exit this
-                    // loop and call release() which will recycle the
-                    // processor (and input buffer) deleting any
-                    // pipe-lined data. To avoid this, process it now.
-                    state = service(socketWrapper);
-                }
             } else if (status == SocketStatus.OPEN_WRITE) {
                 // Extra write event likely after async, ignore
                 state = SocketState.LONG;
@@ -73,6 +63,18 @@ public abstract class AbstractProcessorL
 
             if (state != SocketState.CLOSED && isAsync()) {
                 state = asyncPostProcess();
+                if (state != SocketState.LONG) {
+                    // Async has ended.
+                    state = dispatch(status);
+                    if (state == SocketState.OPEN) {
+                        // There may be pipe-lined data to read. If the data
+                        // isn't processed now, execution will exit this
+                        // loop and call release() which will recycle the
+                        // processor (and input buffer) deleting any
+                        // pipe-lined data. To avoid this, process it now.
+                        state = service(socketWrapper);
+                    }
+                }
             }
 
             if (getLog().isDebugEnabled()) {
@@ -86,8 +88,7 @@ public abstract class AbstractProcessorL
                 // dispatches to process.
                 dispatches = getIteratorAndClearDispatches();
             }
-        } while (state == SocketState.ASYNC_END ||
-                dispatches != null && state != SocketState.CLOSED);
+        } while (dispatches != null && state != SocketState.CLOSED);
 
         return state;
     }

Modified: tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java?rev=1716766&r1=1716765&r2=1716766&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java [UTF-8] (original)
+++ tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java [UTF-8] Thu Nov 26 20:53:26 2015
@@ -241,17 +241,17 @@ public class AsyncStateMachine {
         } else if (state == AsyncState.MUST_COMPLETE) {
             asyncCtxt.fireOnComplete();
             state = AsyncState.DISPATCHED;
-            return SocketState.ASYNC_END;
+            return SocketState.OPEN;
         } else if (state == AsyncState.COMPLETING) {
             asyncCtxt.fireOnComplete();
             state = AsyncState.DISPATCHED;
-            return SocketState.ASYNC_END;
+            return SocketState.OPEN;
         } else if (state == AsyncState.MUST_DISPATCH) {
             state = AsyncState.DISPATCHING;
-            return SocketState.ASYNC_END;
+            return SocketState.OPEN;
         } else if (state == AsyncState.DISPATCHING) {
             state = AsyncState.DISPATCHED;
-            return SocketState.ASYNC_END;
+            return SocketState.OPEN;
         } else if (state == AsyncState.STARTED) {
             // This can occur if an async listener does a dispatch to an async
             // servlet during onTimeout

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1716766&r1=1716765&r2=1716766&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Thu Nov 26 20:53:26 2015
@@ -56,9 +56,7 @@ public abstract class AbstractEndpoint<S
          * Different types of socket states to react upon.
          */
         public enum SocketState {
-            // TODO Add a new state to the AsyncStateMachine and remove
-            //      ASYNC_END (if possible)
-            OPEN, CLOSED, LONG, ASYNC_END, SENDFILE, UPGRADING, UPGRADED
+            OPEN, CLOSED, LONG, SENDFILE, UPGRADING, UPGRADED
         }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org