Author: markt
Date: Mon Sep  5 15:03:51 2011
New Revision: 1165309

URL: http://svn.apache.org/viewvc?rev=1165309&view=rev
Log:
Pull out implementation specific processing that determines if keep-alive 
should be broken into a separate method.

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java?rev=1165309&r1=1165308&r2=1165309&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Mon 
Sep  5 15:03:51 2011
@@ -47,6 +47,7 @@ import org.apache.tomcat.util.http.MimeH
 import org.apache.tomcat.util.net.AbstractEndpoint;
 import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState;
 import org.apache.tomcat.util.net.SocketStatus;
+import org.apache.tomcat.util.net.SocketWrapper;
 import org.apache.tomcat.util.res.StringManager;
 
 public abstract class AbstractHttp11Processor<S> extends AbstractProcessor<S> {
@@ -84,6 +85,14 @@ public abstract class AbstractHttp11Proc
      */
     protected boolean openSocket = false;
 
+
+    /**
+     * 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).
+     */
+    protected boolean sendfileInProgress = false;
+
+
     /**
      * HTTP/1.1 flag.
      */
@@ -1303,7 +1312,18 @@ public abstract class AbstractHttp11Proc
         }
 
     }
-    
+
+
+    /**
+     * Checks to see of the keep-alive loop should be broken, performing any
+     * processing (e.g. send file handling) that may have an impact on whether
+     * or not the keep-alive loop should be broken.
+     * @return
+     */
+    protected abstract boolean breakKeepAliveLoop(
+               SocketWrapper<S> socketWrapper);
+
+
     public final void recycle() {
         getInputBuffer().recycle();
         getOutputBuffer().recycle();

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?rev=1165309&r1=1165308&r2=1165309&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java Mon Sep  
5 15:03:51 2011
@@ -182,6 +182,7 @@ public class Http11AprProcessor extends 
         keepAlive = true;
         comet = false;
         openSocket = false;
+        sendfileInProgress = false;
 
         int soTimeout = endpoint.getSoTimeout();
 
@@ -190,7 +191,6 @@ public class Http11AprProcessor extends 
         }
 
         boolean keptAlive = false;
-        boolean sendfileInProgress = false;
 
         long socketRef = socketWrapper.getSocket().longValue();
 
@@ -319,27 +319,8 @@ public class Http11AprProcessor extends 
 
             rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE);
 
-            // Do sendfile as needed: add socket to sendfile and end
-            if (sendfileData != null && !error) {
-                sendfileData.socket = socketRef;
-                sendfileData.keepAlive = keepAlive;
-                if (!((AprEndpoint)endpoint).getSendfile().add(sendfileData)) {
-                    // Didn't send all of the data to sendfile.
-                    if (sendfileData.socket == 0) {
-                        // The socket is no longer set. Something went wrong.
-                        // Close the connection. Too late to set status code.
-                        if (log.isDebugEnabled()) {
-                            log.debug(sm.getString(
-                                    "http11processor.sendfile.error"));
-                        }
-                        error = true;
-                    } else {
-                        // The sendfile Poller will add the socket to the main
-                        // Poller once sendfile processing is complete
-                        sendfileInProgress = true;
-                    }
-                    break;
-                }
+            if (breakKeepAliveLoop(socketWrapper)) {
+               break;
             }
         }
 
@@ -361,6 +342,34 @@ public class Http11AprProcessor extends 
 
 
     @Override
+    protected boolean breakKeepAliveLoop(SocketWrapper<Long> socketWrapper) {
+        // Do sendfile as needed: add socket to sendfile and end
+        if (sendfileData != null && !error) {
+            sendfileData.socket = socketWrapper.getSocket().longValue();
+            sendfileData.keepAlive = keepAlive;
+            if (!((AprEndpoint)endpoint).getSendfile().add(sendfileData)) {
+                // Didn't send all of the data to sendfile.
+                if (sendfileData.socket == 0) {
+                    // The socket is no longer set. Something went wrong.
+                    // Close the connection. Too late to set status code.
+                    if (log.isDebugEnabled()) {
+                        log.debug(sm.getString(
+                                "http11processor.sendfile.error"));
+                    }
+                    error = true;
+                } else {
+                    // The sendfile Poller will add the socket to the main
+                    // Poller once sendfile processing is complete
+                    sendfileInProgress = true;
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    @Override
     protected boolean disableKeepAlive() {
         return false;
     }

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?rev=1165309&r1=1165308&r2=1165309&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Mon Sep  
5 15:03:51 2011
@@ -211,6 +211,7 @@ public class Http11NioProcessor extends 
         keepAlive = true;
         comet = false;
         openSocket = false;
+        sendfileInProgress = false;
         
         int soTimeout = endpoint.getSoTimeout();
 
@@ -380,16 +381,8 @@ public class Http11NioProcessor extends 
 
             rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE);
 
-            // Do sendfile as needed: add socket to sendfile and end
-            if (sendfileData != null && !error) {
-                ((KeyAttachment) socketWrapper).setSendfileData(sendfileData);
-                sendfileData.keepAlive = keepAlive;
-                SelectionKey key = 
socketWrapper.getSocket().getIOChannel().keyFor(
-                        socketWrapper.getSocket().getPoller().getSelector());
-                //do the first write on this thread, might as well
-                openSocket = 
socketWrapper.getSocket().getPoller().processSendfile(key,
-                        (KeyAttachment) socketWrapper, true, true);
-                break;
+            if (breakKeepAliveLoop(socketWrapper)) {
+               break;
             }
         }
 
@@ -401,7 +394,24 @@ public class Http11NioProcessor extends 
         } else {
             return (openSocket) ? 
(readComplete?SocketState.OPEN:SocketState.LONG) : SocketState.CLOSED;
         }
+    }
+
 
+    @Override
+    protected boolean breakKeepAliveLoop(
+               SocketWrapper<NioChannel> socketWrapper) {
+        // Do sendfile as needed: add socket to sendfile and end
+        if (sendfileData != null && !error) {
+            ((KeyAttachment) socketWrapper).setSendfileData(sendfileData);
+            sendfileData.keepAlive = keepAlive;
+            SelectionKey key = socketWrapper.getSocket().getIOChannel().keyFor(
+                    socketWrapper.getSocket().getPoller().getSelector());
+            //do the first write on this thread, might as well
+            openSocket = 
socketWrapper.getSocket().getPoller().processSendfile(key,
+                    (KeyAttachment) socketWrapper, true, true);
+            return true;
+        }
+       return false;
     }
 
 

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java?rev=1165309&r1=1165308&r2=1165309&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Processor.java Mon Sep  5 
15:03:51 2011
@@ -146,6 +146,7 @@ public class Http11Processor extends Abs
         keepAlive = true;
         comet = false;
         openSocket = false;
+        sendfileInProgress = false;
 
         int soTimeout = endpoint.getSoTimeout();
 
@@ -313,10 +314,8 @@ public class Http11Processor extends Abs
 
             rp.setStage(org.apache.coyote.Constants.STAGE_KEEPALIVE);
 
-            // If we don't have a pipe-lined request allow this thread to be
-            // used by another connection
-            if (isAsync() || error || inputBuffer.lastValid == 0) {
-                break;
+            if (breakKeepAliveLoop(socketWrapper)) {
+               break;
             }
         }
 
@@ -333,7 +332,18 @@ public class Http11Processor extends Abs
             }
         } 
     }
-    
+
+
+    @Override
+    protected boolean breakKeepAliveLoop(SocketWrapper<Socket> socketWrapper) {
+        // If we don't have a pipe-lined request allow this thread to be
+        // used by another connection
+        if (isAsync() || error || inputBuffer.lastValid == 0) {
+            return true;
+        }
+        return false;
+    }
+
     
     @Override
     protected boolean disableKeepAlive() {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to