Author: markt
Date: Wed Oct 29 21:25:33 2014
New Revision: 1635308

URL: http://svn.apache.org/r1635308
Log:
Follow-up to 1635301
Use isCompleting to align with isDispatching
Fix the implementation for HTTP and AJP

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/Request.java
    tomcat/trunk/java/org/apache/catalina/valves/ErrorReportValve.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

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=1635308&r1=1635307&r2=1635308&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Wed Oct 29 
21:25:33 2014
@@ -1634,13 +1634,13 @@ public class Request
         return result.get();
     }
 
-    public boolean canAsyncComplete() {
+    public boolean isAsyncCompleting() {
         if (asyncContext == null) {
             return false;
         }
 
         AtomicBoolean result = new AtomicBoolean(false);
-        coyoteRequest.action(ActionCode.ASYNC_CAN_COMPLETE, result);
+        coyoteRequest.action(ActionCode.ASYNC_IS_COMPLETING, result);
         return result.get();
     }
 

Modified: tomcat/trunk/java/org/apache/catalina/valves/ErrorReportValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/ErrorReportValve.java?rev=1635308&r1=1635307&r2=1635308&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/ErrorReportValve.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/ErrorReportValve.java Wed Oct 
29 21:25:33 2014
@@ -123,7 +123,8 @@ public class ErrorReportValve extends Va
             ExceptionUtils.handleThrowable(tt);
         }
 
-        if (request.canAsyncComplete()) {
+        if (request.isAsyncStarted() && !request.isAsyncCompleting() &&
+                !request.isAsyncDispatching()) {
             request.getAsyncContext().complete();
         }
     }

Modified: tomcat/trunk/java/org/apache/coyote/ActionCode.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ActionCode.java?rev=1635308&r1=1635307&r2=1635308&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ActionCode.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ActionCode.java Wed Oct 29 21:25:33 2014
@@ -110,17 +110,17 @@ public enum ActionCode {
     REQ_SET_BODY_REPLAY,
 
     /**
-     * Callback for begin Comet processing
+     * Callback for begin Comet processing.
      */
     COMET_BEGIN,
 
     /**
-     * Callback for end Comet processing
+     * Callback for end Comet processing.
      */
     COMET_END,
 
     /**
-     * Callback for getting the amount of available bytes
+     * Callback for getting the amount of available bytes.
      */
     AVAILABLE,
 
@@ -135,13 +135,13 @@ public enum ActionCode {
     COMET_SETTIMEOUT,
 
     /**
-     * Callback for an async request
+     * Callback for an async request.
      */
     ASYNC_START,
 
     /**
      * Callback for an async call to
-     * {@link javax.servlet.AsyncContext#dispatch()}
+     * {@link javax.servlet.AsyncContext#dispatch()}.
      */
     ASYNC_DISPATCH,
 
@@ -153,29 +153,23 @@ public enum ActionCode {
 
     /**
      * Callback for an async call to
-     * {@link javax.servlet.AsyncContext#start(Runnable)}
+     * {@link javax.servlet.AsyncContext#start(Runnable)}.
      */
     ASYNC_RUN,
 
     /**
-     * Call back to see if it is currently possible to call
-     * {@link javax.servlet.AsyncContext#complete()} without error.
-     */
-    ASYNC_CAN_COMPLETE,
-
-    /**
      * Callback for an async call to
-     * {@link javax.servlet.AsyncContext#complete()}
+     * {@link javax.servlet.AsyncContext#complete()}.
      */
     ASYNC_COMPLETE,
 
     /**
-     * Callback to trigger the processing of an async timeout
+     * Callback to trigger the processing of an async timeout.
      */
     ASYNC_TIMEOUT,
 
     /**
-     * Callback to trigger the error processing
+     * Callback to trigger the error processing.
      */
     ASYNC_ERROR,
 
@@ -186,27 +180,32 @@ public enum ActionCode {
     ASYNC_SETTIMEOUT,
 
     /**
-     * Callback to determine if async processing is in progress
+     * Callback to determine if async processing is in progress.
      */
     ASYNC_IS_ASYNC,
 
     /**
-     * Callback to determine if async dispatch is in progress
+     * Callback to determine if async dispatch is in progress.
      */
     ASYNC_IS_STARTED,
 
     /**
-     * Callback to determine if async dispatch is in progress
+     * Call back to determine if async complete is in progress.
+     */
+    ASYNC_IS_COMPLETING,
+
+    /**
+     * Callback to determine if async dispatch is in progress.
      */
     ASYNC_IS_DISPATCHING,
 
     /**
-     * Callback to determine if async is timing out
+     * Callback to determine if async is timing out.
      */
     ASYNC_IS_TIMINGOUT,
 
     /**
-    * Callback to determine if async is in error
+    * Callback to determine if async is in error.
     */
     ASYNC_IS_ERROR,
 

Modified: tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java?rev=1635308&r1=1635307&r2=1635308&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java [UTF-8] 
(original)
+++ tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java [UTF-8] Wed Oct 
29 21:25:33 2014
@@ -107,26 +107,26 @@ public class AsyncStateMachine {
 
     private static enum AsyncState {
         DISPATCHED(false, false, false, false),
-        STARTING(true, true, true, false),
-        STARTED(true, true, true, false),
-        MUST_COMPLETE(true, true, false, false),
-        COMPLETING(true, false, false, false),
+        STARTING(true, true, false, false),
+        STARTED(true, true, false, false),
+        MUST_COMPLETE(true, true, true, false),
+        COMPLETING(true, false, true, false),
         TIMING_OUT(true, false, false, false),
         MUST_DISPATCH(true, true, false, true),
         DISPATCHING(true, false, false, true),
-        READ_WRITE_OP(true, true, true, false),
+        READ_WRITE_OP(true, true, false, false),
         ERROR(true, false, false, false);
 
         private final boolean isAsync;
         private final boolean isStarted;
-        private final boolean canComplete;
+        private final boolean isCompleting;
         private final boolean isDispatching;
 
-        private AsyncState(boolean isAsync, boolean isStarted, boolean 
canComplete,
+        private AsyncState(boolean isAsync, boolean isStarted, boolean 
isCompleting,
                 boolean isDispatching) {
             this.isAsync = isAsync;
             this.isStarted = isStarted;
-            this.canComplete = canComplete;
+            this.isCompleting = isCompleting;
             this.isDispatching = isDispatching;
         }
 
@@ -142,8 +142,8 @@ public class AsyncStateMachine {
             return isDispatching;
         }
 
-        public boolean canComplete() {
-            return canComplete;
+        public boolean isCompleting() {
+            return isCompleting;
         }
     }
 
@@ -179,8 +179,8 @@ public class AsyncStateMachine {
         return state == AsyncState.ERROR;
     }
 
-    public boolean canComplete() {
-        return state.canComplete();
+    public boolean isCompleting() {
+        return state.isCompleting();
     }
 
     public synchronized void asyncStart(AsyncContextCallback asyncCtxt) {

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=1635308&r1=1635307&r2=1635308&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java Wed Oct 
29 21:25:33 2014
@@ -522,10 +522,6 @@ public abstract class AbstractAjpProcess
             getSocketWrapper().access();
             break;
         }
-        case ASYNC_CAN_COMPLETE: {
-            ((AtomicBoolean) param).set(asyncStateMachine.canComplete());
-            break;
-        }
         case ASYNC_COMPLETE: {
             socketWrapper.clearDispatches();
             if (asyncStateMachine.asyncComplete()) {
@@ -566,6 +562,10 @@ public abstract class AbstractAjpProcess
             ((AtomicBoolean) param).set(asyncStateMachine.isAsyncStarted());
             break;
         }
+        case ASYNC_IS_COMPLETING: {
+            ((AtomicBoolean) param).set(asyncStateMachine.isCompleting());
+            break;
+        }
         case ASYNC_IS_DISPATCHING: {
             ((AtomicBoolean) 
param).set(asyncStateMachine.isAsyncDispatching());
             break;

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=1635308&r1=1635307&r2=1635308&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/AbstractHttp11Processor.java Wed 
Oct 29 21:25:33 2014
@@ -822,6 +822,10 @@ public abstract class AbstractHttp11Proc
             ((AtomicBoolean) param).set(asyncStateMachine.isAsyncStarted());
             break;
         }
+        case ASYNC_IS_COMPLETING: {
+            ((AtomicBoolean) param).set(asyncStateMachine.isCompleting());
+            break;
+        }
         case ASYNC_IS_DISPATCHING: {
             ((AtomicBoolean) 
param).set(asyncStateMachine.isAsyncDispatching());
             break;



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

Reply via email to