- Some small comet fixes.
authorremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 26 May 2006 16:39:08 +0000 (16:39 +0000)
committerremm <remm@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 26 May 2006 16:39:08 +0000 (16:39 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@409696 13f79535-47bb-0310-9956-ffa450edef68

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

index 7faa471..737f2e0 100644 (file)
@@ -116,12 +116,22 @@ public class CoyoteAdapter
         Response response = (Response) res.getNote(ADAPTER_NOTES);\r
 \r
         if (request.getWrapper() != null) {\r
+            \r
+            // Bind the context CL to the current thread\r
+            if (request.getContext().getLoader() != null ) {\r
+                Thread.currentThread().setContextClassLoader\r
+                        (request.getContext().getLoader().getClassLoader());\r
+            }\r
+            \r
             CometProcessor servlet = null;\r
             try {\r
                 servlet = (CometProcessor) request.getWrapper().allocate();\r
             } catch (Throwable t) {\r
                 log.error(sm.getString("coyoteAdapter.service"), t);\r
                 request.removeAttribute("org.apache.tomcat.comet");\r
+                // Restore the context classloader\r
+                Thread.currentThread().setContextClassLoader\r
+                    (CoyoteAdapter.class.getClassLoader());\r
                 return false;\r
             }\r
             try {\r
@@ -156,6 +166,9 @@ public class CoyoteAdapter
                     request.recycle();\r
                     response.recycle();\r
                 }\r
+                // Restore the context classloader\r
+                Thread.currentThread().setContextClassLoader\r
+                    (CoyoteAdapter.class.getClassLoader());\r
             }\r
         }\r
         return true;\r
index 623c85f..8cfa862 100644 (file)
@@ -71,12 +71,20 @@ public abstract class CometServlet
         if (request.getAttribute("org.apache.tomcat.comet.support") == Boolean.TRUE) {
             begin(request, response);
         } else {
-            // FIXME: Implement without comet support
+            // No Comet support: regular servlet handling
             begin(request, response);
-            
-            // Loop reading data
-            
-            end(request, response);
+            boolean error = true;
+            try {
+                // Loop reading data
+                while (read(request, response));
+                error = false;
+            } finally {
+                if (error) {
+                    error(request, response);
+                } else {
+                    end(request, response);
+                }
+            }
         }
         
     }