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/02 23:38:16 UTC

svn commit: r1478576 - /tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java

Author: markt
Date: Thu May  2 21:38:16 2013
New Revision: 1478576

URL: http://svn.apache.org/r1478576
Log:
Refactor in preparation to pull-up non-blocking functionality

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

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=1478576&r1=1478575&r2=1478576&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Thu May  2 21:38:16 2013
@@ -169,7 +169,6 @@ public class Http11NioProcessor extends 
 
     @Override
     public SocketState asyncDispatch(SocketStatus status) {
-        final NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)socket.getSocket().getAttachment(false);
 
 
         if (status == SocketStatus.OPEN_WRITE) {
@@ -180,17 +179,17 @@ public class Http11NioProcessor extends 
                         //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);
                 }
-                //return if we have more data to write
-                if (status == SocketStatus.OPEN_WRITE && isRegisteredForWrite(attach)) {
-                    return SocketState.LONG;
-                }
             } catch (IllegalStateException x) {
-                attach.interestOps(attach.interestOps() | SelectionKey.OP_WRITE);
+                registerForEvent(SelectionKey.OP_WRITE);
             }
         } else if (status == SocketStatus.OPEN_READ) {
             try {
@@ -204,46 +203,52 @@ public class Http11NioProcessor extends 
                     request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, x);
                 }
             } catch (IllegalStateException x) {
-                attach.interestOps(attach.interestOps() | SelectionKey.OP_READ);
+                registerForEvent(SelectionKey.OP_READ);
             }
         }
 
         SocketState state = super.asyncDispatch(status);
-        //return if we have more data to write
-        if (state == SocketState.LONG && isRegisteredForWrite(attach)) {
-            return SocketState.LONG;
-        } else {
-            return state;
+        if (state == SocketState.LONG) {
+            registerForWrite();
         }
+
+        return state;
     }
 
 
 
     @Override
-    public SocketState process(SocketWrapper<NioChannel> socketWrapper) throws IOException {
+    public SocketState process(SocketWrapper<NioChannel> socketWrapper)
+            throws IOException {
         SocketState state = super.process(socketWrapper);
-        final NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)socket.getSocket().getAttachment(false);
-        //return if we have more data to write
-        if (attach != null && isRegisteredForWrite(attach)) {
-            return SocketState.LONG;
-        } else {
-            return state;
+        final NioEndpoint.KeyAttachment attach =
+                (NioEndpoint.KeyAttachment)socket.getSocket().getAttachment(
+                        false);
+        if (attach != null) {
+            registerForWrite();
         }
+        return state;
     }
 
 
-
-
-    protected boolean isRegisteredForWrite(KeyAttachment attach) {
-        //return if we have more data to write
+    protected boolean registerForWrite() {
+        // Register for write if we have more data to write
         if (outputBuffer.hasDataToWrite()) {
-            attach.interestOps(attach.interestOps() | SelectionKey.OP_WRITE);
+            registerForEvent(SelectionKey.OP_WRITE);
             return true;
         } else {
             return false;
         }
     }
 
+
+    protected void registerForEvent(int event) {
+        final NioEndpoint.KeyAttachment attach =
+                (NioEndpoint.KeyAttachment)socket.getSocket().getAttachment(false);
+        attach.interestOps(attach.interestOps() | event);
+    }
+
+
     @Override
     protected void resetTimeouts() {
         final NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment)socket.getSocket().getAttachment(false);



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