Author: markt Date: Thu Nov 26 21:35:04 2015 New Revision: 1716771 URL: http://svn.apache.org/viewvc?rev=1716771&view=rev Log: Revert r1716766 while I re-work it.
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=1716771&r1=1716770&r2=1716771&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java (original) +++ tomcat/trunk/java/org/apache/coyote/AbstractProcessorLight.java Thu Nov 26 21:35:04 2015 @@ -54,6 +54,16 @@ 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; @@ -63,18 +73,6 @@ 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()) { @@ -88,7 +86,8 @@ public abstract class AbstractProcessorL // dispatches to process. dispatches = getIteratorAndClearDispatches(); } - } while (dispatches != null && state != SocketState.CLOSED); + } while (state == SocketState.ASYNC_END || + 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=1716771&r1=1716770&r2=1716771&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 21:35:04 2015 @@ -241,17 +241,17 @@ public class AsyncStateMachine { } else if (state == AsyncState.MUST_COMPLETE) { asyncCtxt.fireOnComplete(); state = AsyncState.DISPATCHED; - return SocketState.OPEN; + return SocketState.ASYNC_END; } else if (state == AsyncState.COMPLETING) { asyncCtxt.fireOnComplete(); state = AsyncState.DISPATCHED; - return SocketState.OPEN; + return SocketState.ASYNC_END; } else if (state == AsyncState.MUST_DISPATCH) { state = AsyncState.DISPATCHING; - return SocketState.OPEN; + return SocketState.ASYNC_END; } else if (state == AsyncState.DISPATCHING) { state = AsyncState.DISPATCHED; - return SocketState.OPEN; + return SocketState.ASYNC_END; } 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=1716771&r1=1716770&r2=1716771&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 21:35:04 2015 @@ -56,7 +56,9 @@ public abstract class AbstractEndpoint<S * Different types of socket states to react upon. */ public enum SocketState { - OPEN, CLOSED, LONG, SENDFILE, UPGRADING, UPGRADED + // TODO Add a new state to the AsyncStateMachine and remove + // ASYNC_END (if possible) + OPEN, CLOSED, LONG, ASYNC_END, SENDFILE, UPGRADING, UPGRADED } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org