Prevent multiple Comet END events
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 25 Jan 2011 17:12:22 +0000 (17:12 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 25 Jan 2011 17:12:22 +0000 (17:12 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1063362 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/connector/CoyoteAdapter.java
webapps/docs/changelog.xml

index 50580f3..59f8c45 100644 (file)
@@ -28,6 +28,7 @@ import javax.servlet.SessionTrackingMode;
 import org.apache.catalina.Context;
 import org.apache.catalina.Wrapper;
 import org.apache.catalina.comet.CometEvent;
+import org.apache.catalina.comet.CometEvent.EventType;
 import org.apache.catalina.core.ApplicationSessionCookieConfig;
 import org.apache.catalina.core.AsyncContextImpl;
 import org.apache.catalina.util.ServerInfo;
@@ -217,8 +218,9 @@ public class CoyoteAdapter implements Adapter {
                 connector.getService().getContainer().getPipeline().getFirst().event(request, response, request.getEvent());
             }
             if (response.isClosed() || !request.isComet()) {
-                if (status==SocketStatus.OPEN) {
-                    //CometEvent.close was called during an event.
+                if (status==SocketStatus.OPEN &&
+                        request.getEvent().getEventType() != EventType.END) {
+                    //CometEvent.close was called during an event other than END
                     request.getEvent().setEventType(CometEvent.EventType.END);
                     request.getEvent().setEventSubType(null);
                     error = true;
index 4f5795c..d72c9e9 100644 (file)
         for explicit additional arguments for the executable. Those were
         broken when implementing fix for bug <bug>49657</bug>. (kkolinko)
       </fix>
+      <fix>
+        Prvent multiple Comet END events if the CometServlet calls
+        <code>event.close()</code> during an END event. (markt) 
+      </fix>
     </changelog>
   </subsection>
 </section>