Author: fhanik Date: Fri Aug 31 14:42:31 2007 New Revision: 571602 URL: http://svn.apache.org/viewvc?rev=571602&view=rev Log: Since comet event can be closed async, for example after we have exited the CoyoteAdapter.service method, but before the HTTP processor, the processor will recycle on its end, but the catalina request/response will never be recycled and cause invalid data.
Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java tomcat/trunk/java/org/apache/catalina/connector/Request.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=571602&r1=571601&r2=571602&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Fri Aug 31 14:42:31 2007 @@ -265,7 +265,7 @@ Request request = (Request) req.getNote(ADAPTER_NOTES); Response response = (Response) res.getNote(ADAPTER_NOTES); - + if (request == null) { // Create objects @@ -286,8 +286,14 @@ req.getParameters().setQueryStringEncoding (connector.getURIEncoding()); + } else if (request.wasComet()) { + //if we enter here, means that the + //request response was not recycled + //do to an async close of the CometEvent + request.recycle(); + response.recycle(); } - + if (connector.getXpoweredBy()) { response.addHeader("X-Powered-By", "Servlet/2.5"); } Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=571602&r1=571601&r2=571602&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original) +++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Fri Aug 31 14:42:31 2007 @@ -19,9 +19,9 @@ package org.apache.catalina.connector; -import java.io.InputStream; -import java.io.IOException; import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.security.Principal; import java.text.SimpleDateFormat; @@ -33,7 +33,6 @@ import java.util.Map; import java.util.TimeZone; import java.util.TreeMap; - import javax.security.auth.Subject; import javax.servlet.FilterChain; import javax.servlet.RequestDispatcher; @@ -45,17 +44,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; -import org.apache.tomcat.util.buf.B2CConverter; -import org.apache.tomcat.util.buf.MessageBytes; -import org.apache.tomcat.util.buf.StringCache; -import org.apache.tomcat.util.http.Cookies; -import org.apache.tomcat.util.http.FastHttpDateFormat; -import org.apache.tomcat.util.http.Parameters; -import org.apache.tomcat.util.http.ServerCookie; -import org.apache.tomcat.util.http.mapper.MappingData; - -import org.apache.coyote.ActionCode; - import org.apache.catalina.Context; import org.apache.catalina.Globals; import org.apache.catalina.Host; @@ -70,8 +58,16 @@ import org.apache.catalina.util.RequestUtil; import org.apache.catalina.util.StringManager; import org.apache.catalina.util.StringParser; +import org.apache.coyote.ActionCode; import org.apache.tomcat.util.MutableBoolean; -import org.apache.catalina.CometEvent; +import org.apache.tomcat.util.buf.B2CConverter; +import org.apache.tomcat.util.buf.MessageBytes; +import org.apache.tomcat.util.buf.StringCache; +import org.apache.tomcat.util.http.Cookies; +import org.apache.tomcat.util.http.FastHttpDateFormat; +import org.apache.tomcat.util.http.Parameters; +import org.apache.tomcat.util.http.ServerCookie; +import org.apache.tomcat.util.http.mapper.MappingData; /** @@ -209,6 +205,10 @@ * Comet state */ protected boolean comet = false; + /** + * Recycling flag if comet state changed async + */ + protected boolean wasComet = false; /** @@ -389,6 +389,7 @@ requestDispatcherPath = null; comet = false; + wasComet = false; if (event != null) { event.clear(); event = null; @@ -2241,6 +2242,10 @@ public boolean isComet() { return comet; } + + public boolean wasComet() { + return wasComet; + } /** @@ -2248,6 +2253,11 @@ */ public void setComet(boolean comet) { this.comet = comet; + if (comet) setWasComet(true); + } + + public void setWasComet(boolean comet) { + wasComet = comet; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]