- It should be possible for the event object to be closed asynchronously. In that...
authorremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 3 Apr 2007 14:13:33 +0000 (14:13 +0000)
committerremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Tue, 3 Apr 2007 14:13:33 +0000 (14:13 +0000)
  should be sent to cleanup the pipeline.

git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@525160 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/connector/CoyoteAdapter.java

index cb15d7f..9a7dd70 100644 (file)
@@ -120,8 +120,15 @@ public class CoyoteAdapter
             boolean error = false;
             try {
                 if (status == SocketStatus.OPEN) {
-                    request.getEvent().setEventType(CometEvent.EventType.READ);
-                    request.getEvent().setEventSubType(null);
+                    if (response.isClosed()) {
+                        // The event has been closed asynchronously, so call end instead of
+                        // read to cleanup the pipeline
+                        request.getEvent().setEventType(CometEvent.EventType.END);
+                        request.getEvent().setEventSubType(null);
+                    } else {
+                        request.getEvent().setEventType(CometEvent.EventType.READ);
+                        request.getEvent().setEventSubType(null);
+                    }
                 } else if (status == SocketStatus.DISCONNECT) {
                     request.getEvent().setEventType(CometEvent.EventType.ERROR);
                     request.getEvent().setEventSubType(CometEvent.EventSubType.CLIENT_DISCONNECT);
@@ -134,8 +141,15 @@ public class CoyoteAdapter
                     request.getEvent().setEventType(CometEvent.EventType.END);
                     request.getEvent().setEventSubType(CometEvent.EventSubType.SERVER_SHUTDOWN);
                 } else if (status == SocketStatus.TIMEOUT) {
-                    request.getEvent().setEventType(CometEvent.EventType.ERROR);
-                    request.getEvent().setEventSubType(CometEvent.EventSubType.TIMEOUT);
+                    if (response.isClosed()) {
+                        // The event has been closed asynchronously, so call end instead of
+                        // read to cleanup the pipeline
+                        request.getEvent().setEventType(CometEvent.EventType.END);
+                        request.getEvent().setEventSubType(null);
+                    } else {
+                        request.getEvent().setEventType(CometEvent.EventType.ERROR);
+                        request.getEvent().setEventSubType(CometEvent.EventSubType.TIMEOUT);
+                    }
                 }
                 
                 // Calling the container