Complete alignment of process() for finishing requests
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 5 Sep 2011 15:21:22 +0000 (15:21 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Mon, 5 Sep 2011 15:21:22 +0000 (15:21 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1165331 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/coyote/http11/AbstractHttp11Processor.java
java/org/apache/coyote/http11/Http11AprProcessor.java
java/org/apache/coyote/http11/Http11NioProcessor.java
java/org/apache/coyote/http11/Http11Processor.java

index dd2e9d4..48aaed4 100644 (file)
@@ -94,6 +94,11 @@ public abstract class AbstractHttp11Processor<S> extends AbstractProcessor<S> {
 
 
     /**
+     * Flag that indicates if the request headers have been completely read.
+     */
+    protected boolean readComplete = true;
+
+    /**
      * HTTP/1.1 flag.
      */
     protected boolean http11 = true;
index ed8e21f..f413559 100644 (file)
@@ -183,6 +183,7 @@ public class Http11AprProcessor extends AbstractHttp11Processor<Long> {
         comet = false;
         openSocket = false;
         sendfileInProgress = false;
+        readComplete = true;
 
         int soTimeout = endpoint.getSoTimeout();
 
@@ -320,7 +321,7 @@ public class Http11AprProcessor extends AbstractHttp11Processor<Long> {
             rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE);
 
             if (breakKeepAliveLoop(socketWrapper)) {
-               break;
+                break;
             }
         }
 
@@ -334,10 +335,17 @@ public class Http11AprProcessor extends AbstractHttp11Processor<Long> {
             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;
+                }
             }
         }
-        
     }
 
 
index 503b132..6345996 100644 (file)
@@ -212,6 +212,7 @@ public class Http11NioProcessor extends AbstractHttp11Processor<NioChannel> {
         comet = false;
         openSocket = false;
         sendfileInProgress = false;
+        readComplete = true;
         
         int soTimeout = endpoint.getSoTimeout();
 
@@ -220,7 +221,6 @@ public class Http11NioProcessor extends AbstractHttp11Processor<NioChannel> {
         }
 
         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<NioChannel> {
             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<NioChannel> socketWrapper) {
+            SocketWrapper<NioChannel> 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<NioChannel> {
                     (KeyAttachment) socketWrapper, true, true);
             return true;
         }
-       return false;
+        return false;
     }
 
 
index 80ce4aa..acee819 100644 (file)
@@ -147,6 +147,7 @@ public class Http11Processor extends AbstractHttp11Processor<Socket> {
         comet = false;
         openSocket = false;
         sendfileInProgress = false;
+        readComplete = true;
 
         int soTimeout = endpoint.getSoTimeout();
 
@@ -315,22 +316,31 @@ public class Http11Processor extends AbstractHttp11Processor<Socket> {
             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;
+                }
             }
-        } 
+        }
     }