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