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 22:35:04 UTC
svn commit: r1716771 - in /tomcat/trunk/java/org/apache:
coyote/AbstractProcessorLight.java coyote/AsyncStateMachine.java
tomcat/util/net/AbstractEndpoint.java
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org