Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49884
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 27 Sep 2010 12:13:32 +0000 (12:13 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 27 Sep 2010 12:13:32 +0000 (12:13 +0000)
commite131864f18239299594fe24aa8f91cd0f17b7530
treee6152a2eee3ebac52edf813d0ac9ee2f04062dd4
parent49e4be802318aff0211ffadade0a4b1792cddf88
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49884

This required a major re-factoring of the async implementation. In summary:
- Moved state management to the Coyote Processor
- Added a SocketWrapper to the APR socket
- Added syncs to ensure only one async state change at a time
- Added syncs to ensure only one thread changing a socket's state at a time

A number of new bugs were also uncovered and fixed by this re-factoring:
- delay processing complete() and dispatch() until request where startAsync() is called finished processing
- onAsyncStart listener event

Currently the test case for bug 49884 passes with the security manager enabled using "ab -n 5000 -c 150 -k ..." (it broke with "ab -n 50 -c 10 ..." previously)

The unit tests pass for all three HTTP connectors.

The AJP connectors have only been modified to ensure the code compiles.

The following work remains:
- Testing all connectors (HTTP and AJP) with TCK + security manager and fixing whatever is broken
- Further clean-up
- There is further scope for reducing code duplication between the connectors / aligning the code so it is easier to maintain.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1001698 13f79535-47bb-0310-9956-ffa450edef68
24 files changed:
java/org/apache/catalina/connector/CoyoteAdapter.java
java/org/apache/catalina/connector/Request.java
java/org/apache/catalina/core/AsyncContextImpl.java
java/org/apache/catalina/security/SecurityClassLoad.java
java/org/apache/coyote/ActionCode.java
java/org/apache/coyote/ajp/AjpAprProcessor.java
java/org/apache/coyote/ajp/AjpAprProtocol.java
java/org/apache/coyote/http11/AbstractHttp11Processor.java
java/org/apache/coyote/http11/Constants.java
java/org/apache/coyote/http11/Http11AprProcessor.java
java/org/apache/coyote/http11/Http11AprProtocol.java
java/org/apache/coyote/http11/Http11NioProcessor.java
java/org/apache/coyote/http11/Http11NioProtocol.java
java/org/apache/coyote/http11/Http11Processor.java
java/org/apache/coyote/http11/Http11Protocol.java
java/org/apache/coyote/http11/LocalStrings.properties
java/org/apache/tomcat/util/net/AbstractEndpoint.java
java/org/apache/tomcat/util/net/AprEndpoint.java
java/org/apache/tomcat/util/net/JIoEndpoint.java
java/org/apache/tomcat/util/net/NioEndpoint.java
java/org/apache/tomcat/util/net/SocketWrapper.java
java/org/apache/tomcat/util/net/res/LocalStrings.properties
test/org/apache/catalina/core/TestAsyncContextImpl.java
webapps/docs/changelog.xml