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