From d9bc42ba82691eb342854de42560cc403015c88f Mon Sep 17 00:00:00 2001 From: markt Date: Mon, 5 Sep 2011 15:31:46 +0000 Subject: [PATCH] Align request processing between the connectors git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1165338 13f79535-47bb-0310-9956-ffa450edef68 --- .../coyote/http11/AbstractHttp11Processor.java | 6 ++++ .../apache/coyote/http11/Http11AprProcessor.java | 8 ++++++ .../apache/coyote/http11/Http11NioProcessor.java | 32 +++++++++++++--------- java/org/apache/coyote/http11/Http11Processor.java | 9 +++++- 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/java/org/apache/coyote/http11/AbstractHttp11Processor.java b/java/org/apache/coyote/http11/AbstractHttp11Processor.java index 48aaed42e..d5a602cc9 100644 --- a/java/org/apache/coyote/http11/AbstractHttp11Processor.java +++ b/java/org/apache/coyote/http11/AbstractHttp11Processor.java @@ -1291,6 +1291,12 @@ public abstract class AbstractHttp11Processor extends AbstractProcessor { protected abstract void resetTimeouts(); + /** + * Provides a mechanism for those connectors (currently only NIO) that need + * that need to set comment timeouts. + */ + protected abstract void setCometTimeouts(SocketWrapper socketWrapper); + public void endRequest() { // Finish the handling of the request diff --git a/java/org/apache/coyote/http11/Http11AprProcessor.java b/java/org/apache/coyote/http11/Http11AprProcessor.java index f41355989..907938bb1 100644 --- a/java/org/apache/coyote/http11/Http11AprProcessor.java +++ b/java/org/apache/coyote/http11/Http11AprProcessor.java @@ -278,6 +278,7 @@ public class Http11AprProcessor extends AbstractHttp11Processor { (!isAsync() && statusDropsConnection(response.getStatus())); } + setCometTimeouts(socketWrapper); } catch (InterruptedIOException e) { error = true; } catch (Throwable t) { @@ -350,6 +351,13 @@ public class Http11AprProcessor extends AbstractHttp11Processor { @Override + protected void setCometTimeouts(SocketWrapper socketWrapper) { + // NO-OP for APR/native + return; + } + + + @Override protected boolean breakKeepAliveLoop(SocketWrapper socketWrapper) { // Do sendfile as needed: add socket to sendfile and end if (sendfileData != null && !error) { diff --git a/java/org/apache/coyote/http11/Http11NioProcessor.java b/java/org/apache/coyote/http11/Http11NioProcessor.java index 6345996de..437f24da5 100644 --- a/java/org/apache/coyote/http11/Http11NioProcessor.java +++ b/java/org/apache/coyote/http11/Http11NioProcessor.java @@ -326,19 +326,7 @@ public class Http11NioProcessor extends AbstractHttp11Processor { (!isAsync() && statusDropsConnection(response.getStatus())); } - // Comet support - SelectionKey key = socketWrapper.getSocket().getIOChannel().keyFor( - socketWrapper.getSocket().getPoller().getSelector()); - if (key != null) { - NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment) key.attachment(); - if (attach != null) { - attach.setComet(comet); - if (comet) { - Integer comettimeout = (Integer) request.getAttribute("org.apache.tomcat.comet.timeout"); - if (comettimeout != null) attach.setTimeout(comettimeout.longValue()); - } - } - } + setCometTimeouts(socketWrapper); } catch (InterruptedIOException e) { error = true; } catch (Throwable t) { @@ -411,6 +399,24 @@ public class Http11NioProcessor extends AbstractHttp11Processor { @Override + protected void setCometTimeouts(SocketWrapper socketWrapper) { + // Comet support + SelectionKey key = socketWrapper.getSocket().getIOChannel().keyFor( + socketWrapper.getSocket().getPoller().getSelector()); + if (key != null) { + NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment) key.attachment(); + if (attach != null) { + attach.setComet(comet); + if (comet) { + Integer comettimeout = (Integer) request.getAttribute("org.apache.tomcat.comet.timeout"); + if (comettimeout != null) attach.setTimeout(comettimeout.longValue()); + } + } + } + } + + + @Override protected boolean breakKeepAliveLoop( SocketWrapper socketWrapper) { // Do sendfile as needed: add socket to sendfile and end diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index acee8190a..b028cd2b2 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -272,7 +272,7 @@ public class Http11Processor extends AbstractHttp11Processor { (!isAsync() && statusDropsConnection(response.getStatus())); } - + setCometTimeouts(socketWrapper); } catch (InterruptedIOException e) { error = true; } catch (Throwable t) { @@ -345,6 +345,13 @@ public class Http11Processor extends AbstractHttp11Processor { @Override + protected void setCometTimeouts(SocketWrapper socketWrapper) { + // NO-OP for BIO + return; + } + + + @Override protected boolean breakKeepAliveLoop(SocketWrapper socketWrapper) { // If we don't have a pipe-lined request allow this thread to be // used by another connection -- 2.11.0