You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/05/03 12:18:21 UTC

svn commit: r1478714 - in /tomcat/trunk/java/org/apache/coyote/http11: AbstractHttp11Processor.java Http11NioProcessor.java

Author: markt
Date: Fri May  3 10:18:20 2013
New Revision: 1478714

URL: http://svn.apache.org/r1478714
Log:
Pull-up non-blocking code for asyncDispatch from NioHttp11Processor to AbstractHttp11Processor

Modified:
    tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.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=1478714&r1=1478713&r2=1478714&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Fri May  3 10:18:20 2013
@@ -23,6 +23,7 @@ import java.util.StringTokenizer;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.regex.Pattern;
 
+import javax.servlet.RequestDispatcher;
 import javax.servlet.http.HttpUpgradeHandler;
 
 import org.apache.coyote.AbstractProcessor;
@@ -1540,6 +1541,46 @@ public abstract class AbstractHttp11Proc
     @Override
     public SocketState asyncDispatch(SocketStatus status) {
 
+        if (status == SocketStatus.OPEN_WRITE) {
+            try {
+                asyncStateMachine.asyncOperation();
+                try {
+                    if (outputBuffer.hasDataToWrite()) {
+                        //System.out.println("Attempting data flush!!");
+                        outputBuffer.flushBuffer(false);
+                    }
+                    //return if we have more data to write
+                    if (registerForWrite()) {
+                        return SocketState.LONG;
+                    }
+                } catch (IOException x) {
+                    if (getLog().isDebugEnabled()) {
+                        getLog().debug("Unable to write async data.",x);
+                    }
+                    status = SocketStatus.ASYNC_WRITE_ERROR;
+                    request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, x);
+                }
+            } catch (IllegalStateException x) {
+                registerForEvent(false, true);
+            }
+        } else if (status == SocketStatus.OPEN_READ) {
+            try {
+                try {
+                    if (inputBuffer.nbRead()>0) {
+                        asyncStateMachine.asyncOperation();
+                    }
+                } catch (IOException x) {
+                    if (getLog().isDebugEnabled()) {
+                        getLog().debug("Unable to read async data.",x);
+                    }
+                    status = SocketStatus.ASYNC_READ_ERROR;
+                    request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, x);
+                }
+            } catch (IllegalStateException x) {
+                registerForEvent(false, true);
+            }
+        }
+
         RequestInfo rp = request.getRequestProcessor();
         try {
             rp.setStage(org.apache.coyote.Constants.STAGE_SERVICE);
@@ -1564,6 +1605,7 @@ public abstract class AbstractHttp11Proc
         if (error) {
             return SocketState.CLOSED;
         } else if (isAsync()) {
+            registerForWrite();
             return SocketState.LONG;
         } else {
             if (!keepAlive) {

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=1478714&r1=1478713&r2=1478714&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Fri May  3 10:18:20 2013
@@ -22,7 +22,6 @@ import java.net.InetAddress;
 import java.nio.channels.SelectionKey;
 
 import javax.net.ssl.SSLEngine;
-import javax.servlet.RequestDispatcher;
 
 import org.apache.coyote.ActionCode;
 import org.apache.coyote.RequestInfo;
@@ -160,57 +159,6 @@ public class Http11NioProcessor extends 
     }
 
 
-
-
-    @Override
-    public SocketState asyncDispatch(SocketStatus status) {
-
-
-        if (status == SocketStatus.OPEN_WRITE) {
-            try {
-                asyncStateMachine.asyncOperation();
-                try {
-                    if (outputBuffer.hasDataToWrite()) {
-                        //System.out.println("Attempting data flush!!");
-                        outputBuffer.flushBuffer(false);
-                    }
-                    //return if we have more data to write
-                    if (registerForWrite()) {
-                        return SocketState.LONG;
-                    }
-                } catch (IOException x) {
-                    if (log.isDebugEnabled()) log.debug("Unable to write async data.",x);
-                    status = SocketStatus.ASYNC_WRITE_ERROR;
-                    request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, x);
-                }
-            } catch (IllegalStateException x) {
-                registerForEvent(false, true);
-            }
-        } else if (status == SocketStatus.OPEN_READ) {
-            try {
-                try {
-                    if (inputBuffer.nbRead()>0) {
-                        asyncStateMachine.asyncOperation();
-                    }
-                } catch (IOException x) {
-                    if (log.isDebugEnabled()) log.debug("Unable to read async data.",x);
-                    status = SocketStatus.ASYNC_READ_ERROR;
-                    request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, x);
-                }
-            } catch (IllegalStateException x) {
-                registerForEvent(false, true);
-            }
-        }
-
-        SocketState state = super.asyncDispatch(status);
-        if (state == SocketState.LONG) {
-            registerForWrite();
-        }
-
-        return state;
-    }
-
-
     @Override
     protected void registerForEvent(boolean read, boolean write) {
         final NioEndpoint.KeyAttachment attach =



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