From c2d368a4bd6442ed8f180314be09d96eeb25cdb0 Mon Sep 17 00:00:00 2001 From: remm Date: Fri, 26 May 2006 16:39:08 +0000 Subject: [PATCH] - Some small comet fixes. 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 | 13 +++++++++++++ java/org/apache/catalina/servlets/CometServlet.java | 18 +++++++++++++----- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/java/org/apache/catalina/connector/CoyoteAdapter.java b/java/org/apache/catalina/connector/CoyoteAdapter.java index 7faa47113..737f2e0eb 100644 --- a/java/org/apache/catalina/connector/CoyoteAdapter.java +++ b/java/org/apache/catalina/connector/CoyoteAdapter.java @@ -116,12 +116,22 @@ public class CoyoteAdapter Response response = (Response) res.getNote(ADAPTER_NOTES); if (request.getWrapper() != null) { + + // Bind the context CL to the current thread + if (request.getContext().getLoader() != null ) { + Thread.currentThread().setContextClassLoader + (request.getContext().getLoader().getClassLoader()); + } + CometProcessor servlet = null; try { servlet = (CometProcessor) request.getWrapper().allocate(); } catch (Throwable t) { log.error(sm.getString("coyoteAdapter.service"), t); request.removeAttribute("org.apache.tomcat.comet"); + // Restore the context classloader + Thread.currentThread().setContextClassLoader + (CoyoteAdapter.class.getClassLoader()); return false; } try { @@ -156,6 +166,9 @@ public class CoyoteAdapter request.recycle(); response.recycle(); } + // Restore the context classloader + Thread.currentThread().setContextClassLoader + (CoyoteAdapter.class.getClassLoader()); } } return true; diff --git a/java/org/apache/catalina/servlets/CometServlet.java b/java/org/apache/catalina/servlets/CometServlet.java index 623c85f2a..8cfa862d3 100644 --- a/java/org/apache/catalina/servlets/CometServlet.java +++ b/java/org/apache/catalina/servlets/CometServlet.java @@ -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); + } + } } } -- 2.11.0