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 2013/05/24 16:09:28 UTC
svn commit: r1486061 -
/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
Author: markt
Date: Fri May 24 14:09:27 2013
New Revision: 1486061
URL: http://svn.apache.org/r1486061
Log:
Use new isFinished() method rather than available==0
Check if body has been read in non-blocking mode when exiting service method
Modified:
tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1486061&r1=1486060&r2=1486061&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Fri May 24 14:09:27 2013
@@ -21,6 +21,7 @@ import java.io.UnsupportedEncodingExcept
import java.nio.charset.Charset;
import java.util.EnumSet;
+import javax.servlet.ReadListener;
import javax.servlet.RequestDispatcher;
import javax.servlet.SessionTrackingMode;
import javax.servlet.http.HttpServletResponse;
@@ -369,7 +370,7 @@ public class CoyoteAdapter implements Ad
try {
Thread.currentThread().setContextClassLoader(newCL);
req.getReadListener().onDataAvailable();
- if (request.getInputStream().isFinished()) {
+ if (request.isFinished()) {
req.getReadListener().onAllDataRead();
}
} finally {
@@ -515,6 +516,24 @@ public class CoyoteAdapter implements Ad
AsyncContextImpl asyncConImpl = (AsyncContextImpl)request.getAsyncContext();
if (asyncConImpl != null) {
async = true;
+ ReadListener readListener =
+ request.getCoyoteRequest().getReadListener();
+ if (readListener != null) {
+ // Possible the all data may have been read during service()
+ // method so this needs to be checked here
+ ClassLoader oldCL =
+ Thread.currentThread().getContextClassLoader();
+ ClassLoader newCL =
+ request.getContext().getLoader().getClassLoader();
+ try {
+ Thread.currentThread().setContextClassLoader(newCL);
+ if (request.isFinished()) {
+ req.getReadListener().onAllDataRead();
+ }
+ } finally {
+ Thread.currentThread().setContextClassLoader(oldCL);
+ }
+ }
} else if (!comet) {
request.finishRequest();
response.finishResponse();
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org