Author: markt
Date: Tue Apr 30 10:39:36 2013
New Revision: 1477543

URL: http://svn.apache.org/r1477543
Log:
Remove the request.isAsyncOperation() method and the associated plumbing as 
res.getWriteListener() != null does the same thing with less code.
Add a (currently unimplemented) dispatch() line from READ_WRITE_OP to the state 
diagram.

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
    tomcat/trunk/java/org/apache/catalina/connector/Request.java
    tomcat/trunk/java/org/apache/coyote/ActionCode.java
    tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java
    tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
    tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java
    tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java

Modified: tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java?rev=1477543&r1=1477542&r2=1477543&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/CoyoteAdapter.java Tue Apr 
30 10:39:36 2013
@@ -345,44 +345,37 @@ public class CoyoteAdapter implements Ad
                 }
             }
 
-
-            if (!request.isAsyncDispatching() && request.isAsync() &&
-                    request.isAsyncOperation()) {
-                if (status == SocketStatus.OPEN_WRITE) {
-                    if (res.getWriteListener() == null) {
-                        success = false;
-                    } else {
-                        ClassLoader oldCL =
-                                Thread.currentThread().getContextClassLoader();
-                        ClassLoader newCL =
-                                
request.getContext().getLoader().getClassLoader();
-                        try {
-                            
Thread.currentThread().setContextClassLoader(newCL);
-                            res.getWriteListener().onWritePossible();
-                        } finally {
-                            
Thread.currentThread().setContextClassLoader(oldCL);
-                        }
-                        success = true;
+            // Check to see if non-blocking writes are reads are being used
+            if (!request.isAsyncDispatching() && request.isAsync()) {
+                if (res.getWriteListener() != null &&
+                        status == SocketStatus.OPEN_WRITE) {
+                    ClassLoader oldCL =
+                            Thread.currentThread().getContextClassLoader();
+                    ClassLoader newCL =
+                            request.getContext().getLoader().getClassLoader();
+                    try {
+                        Thread.currentThread().setContextClassLoader(newCL);
+                        res.getWriteListener().onWritePossible();
+                    } finally {
+                        Thread.currentThread().setContextClassLoader(oldCL);
                     }
-                } else if (status == SocketStatus.OPEN_READ) {
-                    if (req.getReadListener() == null) {
-                        success = false;
-                    } else {
-                        ClassLoader oldCL =
-                                Thread.currentThread().getContextClassLoader();
-                        ClassLoader newCL =
-                                
request.getContext().getLoader().getClassLoader();
-                        try {
-                            
Thread.currentThread().setContextClassLoader(newCL);
-                            req.getReadListener().onDataAvailable();
-                            if (request.getInputStream().isFinished()) {
-                                req.getReadListener().onAllDataRead();
-                            }
-                        } finally {
-                            
Thread.currentThread().setContextClassLoader(oldCL);
+                    success = true;
+                } else if (req.getReadListener() != null &&
+                        status == SocketStatus.OPEN_READ) {
+                    ClassLoader oldCL =
+                            Thread.currentThread().getContextClassLoader();
+                    ClassLoader newCL =
+                            request.getContext().getLoader().getClassLoader();
+                    try {
+                        Thread.currentThread().setContextClassLoader(newCL);
+                        req.getReadListener().onDataAvailable();
+                        if (request.getInputStream().isFinished()) {
+                            req.getReadListener().onAllDataRead();
                         }
-                        success = true;
+                    } finally {
+                        Thread.currentThread().setContextClassLoader(oldCL);
                     }
+                    success = true;
                 }
             }
 

Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1477543&r1=1477542&r2=1477543&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Tue Apr 30 
10:39:36 2013
@@ -1661,16 +1661,6 @@ public class Request
         return result.get();
     }
 
-    public boolean isAsyncOperation() {
-        if (asyncContext == null) {
-            return false;
-        }
-
-        AtomicBoolean result = new AtomicBoolean(false);
-        coyoteRequest.action(ActionCode.ASYNC_IS_ASYNC_OPERATION, result);
-        return result.get();
-    }
-
     @Override
     public boolean isAsyncSupported() {
         if (this.asyncSupported == null) {

Modified: tomcat/trunk/java/org/apache/coyote/ActionCode.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ActionCode.java?rev=1477543&r1=1477542&r2=1477543&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ActionCode.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ActionCode.java Tue Apr 30 10:39:36 2013
@@ -176,11 +176,6 @@ public enum ActionCode {
     ASYNC_IS_ASYNC,
 
     /**
-     * Callback to determine if async read/write is in progress
-     */
-    ASYNC_IS_ASYNC_OPERATION,
-
-    /**
      * Callback to determine if async dispatch is in progress
      */
     ASYNC_IS_STARTED,

Modified: tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java?rev=1477543&r1=1477542&r2=1477543&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java Tue Apr 30 
10:39:36 2013
@@ -71,26 +71,28 @@ import org.apache.tomcat.util.res.String
  * |   |      |       |               |                 |             |     
/-----------|         |
  * |   |      |       ^               |dispatch()       |             |    /   
                   |
  * |   |      |       |               |                 |             |   /    
                   |
- * |   |      |       |              \|/                /            \|/ /     
 postProcess()     |
+ * |   |      |       |              \|/                /            \|/ /    
postProcess()       |
  * |   |      |       |         MUST_DISPATCH          /           
STARTED<---------<---------|   |
- * |   |      |       |           |                   /            /|  \       
               |   |
- * |   |      |       |           |postProcess()     /            / |   \      
               |   |
- * ^   |      ^       |           |                 /  dispatch()/  |    \     
               |   |
- * |   |      |       |           |                /            /   |     \    
               |   |
- * |   |      |       |           |   |---------- / -----------/    |auto  \   
               |   |
- * |   |      |       |           |   |          /                  |       \  
               |   |
- * |   |      |       |           |   |   |-----/                   |       |  
               |   |
- * |   |      |       | auto     \|/ \|/ \|/                       \|/      |  
               |   |
- * |   |      |       |---<------DISPATCHING<-----------------TIMING_OUT    |  
               |   |
- * |   |      |                               dispatch()        |   |       
|asyncOperation() ^   |
- * |   |      |                                                 |   |      \|/ 
               |   ^
- * |   |      |-------<----------------------------------<------|   |     
READ_WRITE_OP->-----|   |
- * |   |                          complete()                        |        | 
     |             |
- * |   |                                                            |        | 
     |  error()    |
- * |<- | ----<-------------------<-------------------------------<--|        | 
     |->-----------|
- *     |                           error()                                   |
- *     |                                                  complete()         |
- *     |---------------------------------------------------------------------|
+ * |   |      |       |           |                   /           / |   |      
               |   |
+ * |   |      |       |           |postProcess()     /           /  |   |      
               ^   |
+ * ^   |      ^       |           |                 /           /   |   
|asyncOperation()     |   |
+ * |   |      |       |           |                /           /    |   |      
               |   |
+ * |   |      |       |           |   |---------- / ----------/     |   
|--READ_WRITE_OP-->---|   |
+ * |   |      |       |           |   |          /   dispatch()     |          
  |  |  |          |
+ * |   |      |       |           |   |   |-----/               auto|          
  |  |  |   error()|
+ * |   |      |       | auto     \|/ \|/ \|/                        |  
dispatch()|  |  |->--------|
+ * |   |      |       |---<------DISPATCHING<--------<------------- | 
------<----|  |
+ * |   |      |                      /|\                            |          
     |
+ * |   |      |                       |       dispatch()           \|/         
     |
+ * |   |      |                       |-----------------------TIMING_OUT       
     |
+ * |   |      |                                                 |   |          
     |
+ * |   |      |-------<----------------------------------<------|   |          
     |
+ * |   |                          complete()                        |          
     |
+ * |   |                                                            |          
     |
+ * |<- | ----<-------------------<-------------------------------<--|          
     |
+ *     |                           error()                                     
     |
+ *     |                                                  complete()           
     |
+ *     
|----------------------------------------------------------------------------|
  * </pre>
  */
 public class AsyncStateMachine<S> {
@@ -153,10 +155,6 @@ public class AsyncStateMachine<S> {
         return state.isAsync();
     }
 
-    public boolean isAsyncOperation() {
-        return state == AsyncState.READ_WRITE_OP;
-    }
-
     public boolean isAsyncDispatching() {
         return state.isDispatching();
     }

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1477543&r1=1477542&r2=1477543&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Tue Apr 
30 10:39:36 2013
@@ -456,8 +456,6 @@ public abstract class AbstractAjpProcess
             ((AtomicBoolean) 
param).set(asyncStateMachine.isAsyncDispatching());
         } else if (actionCode == ActionCode.ASYNC_IS_ASYNC) {
             ((AtomicBoolean) param).set(asyncStateMachine.isAsync());
-        } else if (actionCode == ActionCode.ASYNC_IS_ASYNC_OPERATION) {
-            ((AtomicBoolean) param).set(asyncStateMachine.isAsyncOperation());
         } else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) {
             ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut());
         } else if (actionCode == ActionCode.ASYNC_IS_ERROR) {

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=1477543&r1=1477542&r2=1477543&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Tue 
Apr 30 10:39:36 2013
@@ -797,8 +797,6 @@ public abstract class AbstractHttp11Proc
             ((AtomicBoolean) 
param).set(asyncStateMachine.isAsyncDispatching());
         } else if (actionCode == ActionCode.ASYNC_IS_ASYNC) {
             ((AtomicBoolean) param).set(asyncStateMachine.isAsync());
-        } else if (actionCode == ActionCode.ASYNC_IS_ASYNC_OPERATION) {
-            ((AtomicBoolean) param).set(asyncStateMachine.isAsyncOperation());
         } else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) {
             ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut());
         } else if (actionCode == ActionCode.ASYNC_IS_ERROR) {

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=1477543&r1=1477542&r2=1477543&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Tue Apr 
30 10:39:36 2013
@@ -196,7 +196,7 @@ public class Http11NioProcessor extends 
                 if (status == SocketStatus.OPEN_WRITE && 
isRegisteredForWrite(attach)) {
                     return SocketState.LONG;
                 }
-            }catch (IllegalStateException x) {
+            } catch (IllegalStateException x) {
                 attach.interestOps(attach.interestOps() | 
SelectionKey.OP_WRITE);
             }
         } else if (status == SocketStatus.OPEN_READ) {

Modified: tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java?rev=1477543&r1=1477542&r2=1477543&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/spdy/SpdyProcessor.java Tue Apr 30 
10:39:36 2013
@@ -372,8 +372,6 @@ public class SpdyProcessor extends Abstr
             ((AtomicBoolean) 
param).set(asyncStateMachine.isAsyncDispatching());
         } else if (actionCode == ActionCode.ASYNC_IS_ASYNC) {
             ((AtomicBoolean) param).set(asyncStateMachine.isAsync());
-        } else if (actionCode == ActionCode.ASYNC_IS_ASYNC_OPERATION) {
-            ((AtomicBoolean) param).set(asyncStateMachine.isAsyncOperation());
         } else if (actionCode == ActionCode.ASYNC_IS_TIMINGOUT) {
             ((AtomicBoolean) param).set(asyncStateMachine.isAsyncTimingOut());
         } else if (actionCode == ActionCode.ASYNC_IS_ERROR) {



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

Reply via email to