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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org