From: markt Date: Mon, 5 Sep 2011 15:21:22 +0000 (+0000) Subject: Complete alignment of process() for finishing requests X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=a7674cc82f01c4d27d918d5bd9c99ffa4256295b;p=tomcat7.0 Complete alignment of process() for finishing requests git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1165331 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/coyote/http11/AbstractHttp11Processor.java b/java/org/apache/coyote/http11/AbstractHttp11Processor.java index dd2e9d449..48aaed42e 100644 --- a/java/org/apache/coyote/http11/AbstractHttp11Processor.java +++ b/java/org/apache/coyote/http11/AbstractHttp11Processor.java @@ -94,6 +94,11 @@ public abstract class AbstractHttp11Processor extends AbstractProcessor { /** + * Flag that indicates if the request headers have been completely read. + */ + protected boolean readComplete = true; + + /** * HTTP/1.1 flag. */ protected boolean http11 = true; diff --git a/java/org/apache/coyote/http11/Http11AprProcessor.java b/java/org/apache/coyote/http11/Http11AprProcessor.java index ed8e21fb4..f41355989 100644 --- a/java/org/apache/coyote/http11/Http11AprProcessor.java +++ b/java/org/apache/coyote/http11/Http11AprProcessor.java @@ -183,6 +183,7 @@ public class Http11AprProcessor extends AbstractHttp11Processor { comet = false; openSocket = false; sendfileInProgress = false; + readComplete = true; int soTimeout = endpoint.getSoTimeout(); @@ -320,7 +321,7 @@ public class Http11AprProcessor extends AbstractHttp11Processor { rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE); if (breakKeepAliveLoop(socketWrapper)) { - break; + break; } } @@ -334,10 +335,17 @@ public class Http11AprProcessor extends AbstractHttp11Processor { if (sendfileInProgress) { return SocketState.SENDFILE; } else { - return (openSocket) ? SocketState.OPEN : SocketState.CLOSED; + if (openSocket) { + if (readComplete) { + return SocketState.OPEN; + } else { + return SocketState.LONG; + } + } else { + return SocketState.CLOSED; + } } } - } diff --git a/java/org/apache/coyote/http11/Http11NioProcessor.java b/java/org/apache/coyote/http11/Http11NioProcessor.java index 503b1329c..6345996de 100644 --- a/java/org/apache/coyote/http11/Http11NioProcessor.java +++ b/java/org/apache/coyote/http11/Http11NioProcessor.java @@ -212,6 +212,7 @@ public class Http11NioProcessor extends AbstractHttp11Processor { comet = false; openSocket = false; sendfileInProgress = false; + readComplete = true; int soTimeout = endpoint.getSoTimeout(); @@ -220,7 +221,6 @@ public class Http11NioProcessor extends AbstractHttp11Processor { } boolean keptAlive = false; - boolean readComplete = true; while (!error && keepAlive && !comet && !isAsync() && !endpoint.isPaused()) { //always default to our soTimeout @@ -382,24 +382,37 @@ public class Http11NioProcessor extends AbstractHttp11Processor { rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE); if (breakKeepAliveLoop(socketWrapper)) { - break; + break; } } rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); + if (error || endpoint.isPaused()) { return SocketState.CLOSED; } else if (comet || isAsync()) { return SocketState.LONG; } else { - return (openSocket) ? (readComplete?SocketState.OPEN:SocketState.LONG) : SocketState.CLOSED; + if (sendfileInProgress) { + return SocketState.SENDFILE; + } else { + if (openSocket) { + if (readComplete) { + return SocketState.OPEN; + } else { + return SocketState.LONG; + } + } else { + return SocketState.CLOSED; + } + } } } @Override protected boolean breakKeepAliveLoop( - SocketWrapper socketWrapper) { + SocketWrapper socketWrapper) { // Do sendfile as needed: add socket to sendfile and end if (sendfileData != null && !error) { ((KeyAttachment) socketWrapper).setSendfileData(sendfileData); @@ -411,7 +424,7 @@ public class Http11NioProcessor extends AbstractHttp11Processor { (KeyAttachment) socketWrapper, true, true); return true; } - return false; + return false; } diff --git a/java/org/apache/coyote/http11/Http11Processor.java b/java/org/apache/coyote/http11/Http11Processor.java index 80ce4aa4c..acee8190a 100644 --- a/java/org/apache/coyote/http11/Http11Processor.java +++ b/java/org/apache/coyote/http11/Http11Processor.java @@ -147,6 +147,7 @@ public class Http11Processor extends AbstractHttp11Processor { comet = false; openSocket = false; sendfileInProgress = false; + readComplete = true; int soTimeout = endpoint.getSoTimeout(); @@ -315,22 +316,31 @@ public class Http11Processor extends AbstractHttp11Processor { rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE); if (breakKeepAliveLoop(socketWrapper)) { - break; + break; } } rp.setStage(org.apache.coyote.Constants.STAGE_ENDED); + if (error || endpoint.isPaused()) { return SocketState.CLOSED; - } else if (isAsync()) { + } else if (comet || isAsync()) { return SocketState.LONG; } else { - if (!keepAlive) { - return SocketState.CLOSED; + if (sendfileInProgress) { + return SocketState.SENDFILE; } else { - return SocketState.OPEN; + if (openSocket) { + if (readComplete) { + return SocketState.OPEN; + } else { + return SocketState.LONG; + } + } else { + return SocketState.CLOSED; + } } - } + } }