From 27eefb5e008d8740029c972ca804612457a5fe0f Mon Sep 17 00:00:00 2001 From: markt Date: Tue, 6 Sep 2011 11:26:30 +0000 Subject: [PATCH] Make keptAlive initialization common between the connectors git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1165608 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/coyote/http11/AbstractHttp11Processor.java | 10 ++++++++++ java/org/apache/coyote/http11/Http11AprProcessor.java | 7 +++++-- java/org/apache/coyote/http11/Http11NioProcessor.java | 7 +++++-- java/org/apache/coyote/http11/Http11Processor.java | 7 +++++-- java/org/apache/tomcat/util/net/AbstractEndpoint.java | 3 +++ java/org/apache/tomcat/util/net/AprEndpoint.java | 2 ++ java/org/apache/tomcat/util/net/JIoEndpoint.java | 2 ++ java/org/apache/tomcat/util/net/NioEndpoint.java | 2 ++ 8 files changed, 34 insertions(+), 6 deletions(-) diff --git a/java/org/apache/coyote/http11/AbstractHttp11Processor.java b/java/org/apache/coyote/http11/AbstractHttp11Processor.java index 63c84ee64..c364a1722 100644 --- a/java/org/apache/coyote/http11/AbstractHttp11Processor.java +++ b/java/org/apache/coyote/http11/AbstractHttp11Processor.java @@ -87,6 +87,16 @@ public abstract class AbstractHttp11Processor extends AbstractProcessor { /** + * Flag used to indicate that the socket should treat the next request + * processed like a keep-alive connection - i.e. one where there may not be + * any data to process. The initial value of this flag on entering the + * process method is different for connectors that use polling (NIO / APR - + * data is always expected) compared to those that use blocking (BIO - data + * is only expected if the connection isn't in the keep-alive state). + */ + protected boolean keptAlive; + + /** * Flag that indicates that send file processing is in progress and that the * socket should not be returned to the poller (where a poller is used). */ diff --git a/java/org/apache/coyote/http11/Http11AprProcessor.java b/java/org/apache/coyote/http11/Http11AprProcessor.java index 1e2814714..b481fccb8 100644 --- a/java/org/apache/coyote/http11/Http11AprProcessor.java +++ b/java/org/apache/coyote/http11/Http11AprProcessor.java @@ -184,6 +184,11 @@ public class Http11AprProcessor extends AbstractHttp11Processor { openSocket = false; sendfileInProgress = false; readComplete = true; + if (endpoint.getUsePolling()) { + keptAlive = false; + } else { + keptAlive = socketWrapper.isKeptAlive(); + } int soTimeout = endpoint.getSoTimeout(); @@ -191,8 +196,6 @@ public class Http11AprProcessor extends AbstractHttp11Processor { socketWrapper.setKeepAliveLeft(0); } - boolean keptAlive = false; - long socketRef = socketWrapper.getSocket().longValue(); while (!error && keepAlive && !comet && !isAsync() && diff --git a/java/org/apache/coyote/http11/Http11NioProcessor.java b/java/org/apache/coyote/http11/Http11NioProcessor.java index 74d301696..87ebfd4fe 100644 --- a/java/org/apache/coyote/http11/Http11NioProcessor.java +++ b/java/org/apache/coyote/http11/Http11NioProcessor.java @@ -213,6 +213,11 @@ public class Http11NioProcessor extends AbstractHttp11Processor { openSocket = false; sendfileInProgress = false; readComplete = true; + if (endpoint.getUsePolling()) { + keptAlive = false; + } else { + keptAlive = socketWrapper.isKeptAlive(); + } int soTimeout = endpoint.getSoTimeout(); @@ -220,8 +225,6 @@ public class Http11NioProcessor extends AbstractHttp11Processor { socketWrapper.setKeepAliveLeft(0); } - boolean keptAlive = false; - while (!error && keepAlive && !comet && !isAsync() && !endpoint.isPaused()) { diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index 55c7eff66..fbf99b7a5 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -148,6 +148,11 @@ public class Http11Processor extends AbstractHttp11Processor { openSocket = false; sendfileInProgress = false; readComplete = true; + if (endpoint.getUsePolling()) { + keptAlive = false; + } else { + keptAlive = socketWrapper.isKeptAlive(); + } int soTimeout = endpoint.getSoTimeout(); @@ -155,8 +160,6 @@ public class Http11Processor extends AbstractHttp11Processor { socketWrapper.setKeepAliveLeft(0); } - boolean keptAlive = socketWrapper.isKeptAlive(); - while (!error && keepAlive && !comet && !isAsync() && !endpoint.isPaused()) { diff --git a/java/org/apache/tomcat/util/net/AbstractEndpoint.java b/java/org/apache/tomcat/util/net/AbstractEndpoint.java index f60681768..54aad90aa 100644 --- a/java/org/apache/tomcat/util/net/AbstractEndpoint.java +++ b/java/org/apache/tomcat/util/net/AbstractEndpoint.java @@ -559,9 +559,12 @@ public abstract class AbstractEndpoint { protected abstract Log getLog(); // Flags to indicate optional feature support + // Some of these are always hard-coded, some are hard-coded to false (i.e. + // the endpoint does not support them) and some are configurable. public abstract boolean getUseSendfile(); public abstract boolean getUseComet(); public abstract boolean getUseCometTimeout(); + public abstract boolean getUsePolling(); protected LimitLatch initializeConnectionLatch() { if (connectionLimitLatch==null) { diff --git a/java/org/apache/tomcat/util/net/AprEndpoint.java b/java/org/apache/tomcat/util/net/AprEndpoint.java index d0b2ee27c..e5dc675e7 100644 --- a/java/org/apache/tomcat/util/net/AprEndpoint.java +++ b/java/org/apache/tomcat/util/net/AprEndpoint.java @@ -160,6 +160,8 @@ public class AprEndpoint extends AbstractEndpoint { public boolean getUseComet() { return useComet; } @Override public boolean getUseCometTimeout() { return false; } // Not supported + @Override + public boolean getUsePolling() { return true; } // Always supported /** diff --git a/java/org/apache/tomcat/util/net/JIoEndpoint.java b/java/org/apache/tomcat/util/net/JIoEndpoint.java index 3ef6a0c1d..fc3bbefd2 100644 --- a/java/org/apache/tomcat/util/net/JIoEndpoint.java +++ b/java/org/apache/tomcat/util/net/JIoEndpoint.java @@ -108,6 +108,8 @@ public class JIoEndpoint extends AbstractEndpoint { public boolean getUseCometTimeout() { return false; } // Not supported @Override public boolean getDeferAccept() { return false; } // Not supported + @Override + public boolean getUsePolling() { return false; } // Not supported // ------------------------------------------------ Handler Inner Interface diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java index cb628df24..558cf55a3 100644 --- a/java/org/apache/tomcat/util/net/NioEndpoint.java +++ b/java/org/apache/tomcat/util/net/NioEndpoint.java @@ -332,6 +332,8 @@ public class NioEndpoint extends AbstractEndpoint { public boolean getUseComet() { return useComet; } @Override public boolean getUseCometTimeout() { return getUseComet(); } + @Override + public boolean getUsePolling() { return true; } // Always supported /** -- 2.11.0