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 2016/11/01 10:21:20 UTC

svn commit: r1767471 - in /tomcat/trunk: java/org/apache/coyote/AbstractProcessor.java java/org/apache/coyote/AsyncStateMachine.java webapps/docs/changelog.xml

Author: markt
Date: Tue Nov  1 10:21:20 2016
New Revision: 1767471

URL: http://svn.apache.org/viewvc?rev=1767471&view=rev
Log:
If an I/O error occurs during async processing on a non-container thread, ensure that the onError() event is triggered.

Modified:
    tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
    tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1767471&r1=1767470&r2=1767471&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Tue Nov  1 10:21:20 2016
@@ -103,6 +103,9 @@ public abstract class AbstractProcessor
                 response.setStatus(500);
             }
             getLog().info(sm.getString("abstractProcessor.nonContainerThreadError"), t);
+            // Set the request attribute so that the async onError() event is
+            // fired when the error event is processed
+            request.setAttribute(RequestDispatcher.ERROR_EXCEPTION, t);
             socketWrapper.processSocket(SocketEvent.ERROR, true);
         }
     }

Modified: tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java?rev=1767471&r1=1767470&r2=1767471&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java [UTF-8] (original)
+++ tomcat/trunk/java/org/apache/coyote/AsyncStateMachine.java [UTF-8] Tue Nov  1 10:21:20 2016
@@ -69,30 +69,30 @@ import org.apache.tomcat.util.security.P
  * ERROR            - Something went wrong.
  *
  * |-----------------�------|
- * |                       \|/
- * |   |----------�-------ERROR-----------------------------------�-------------------------------|
- * |   |      complete() /|\/|\\                                                                  |
- * |   |                  |  |  \                                                                 |
- * |   |    |-----�-------|  |   \-----------�----------|                                         |
- * |   |    |                |                          |dispatch()                               |
- * |   |    |                |                         \|/                                        |
- * |   |    |                |          |--|timeout()   |                                         |
- * |   |    |     post()     |          | \|/           |     post()                              |
- * |   |    |    |---------- | --�DISPATCHED�---------- | --------------COMPLETING�-----|         |
- * |   |    |    |           |   /|\/|\ |               |                | /|\ /|\      |         |
- * |   |    |    |    |---�- | ---|  |  |startAsync()   |       timeout()|--|   |       |         |
- * |   |    ^    ^    |      |       |  |               |                       |       |         |
- * |   |    |    |    |   |-- \ -----|  |   complete()  |                       |post() |         |
- * |   |    |    |    |   |    \        |     /--�----- | ---COMPLETE_PENDING-�-|       |         |
- * |   |    |    |    |   |     \       |    /          |                               |         |
- * |   |    |    |    |   ^      \      |   /           |                               |         |
- * |  \|/   |    |    |   |       \    \|/ /   post()   |                               |         |
- * | MUST_COMPLETE-�- | - | --�----STARTING--�--------- | -------------|                ^         |
- * |  /|\    /|\      |   |  complete()  | \            |              |     complete() |         |
- * |   |      |       |   |              |  \           |    post()    |     /----------|         |
- * |   |      |       ^   |    dispatch()|   \          |    |-----|   |    /                     |
- * |   |      |       |   |              |    \         |    |     |   |   /                      |
- * |   |      |       |   |             \|/    \        |    |    \|/ \|/ /       post()          |
+ * |                       \|/ /-----------------------------------�------------------------------|
+ * |   |----------�-------ERROR----------------------------�-------------------------------|      |
+ * |   |      complete() /|\/|\\                                                           |      |
+ * |   |                  |  |  \                                                          |      |
+ * |   |    |-----�-------|  |   \-----------�----------|                                  |      |
+ * |   |    |                |                          |dispatch()                        |      |
+ * |   |    |                |                         \|/                                 |      |
+ * |   |    |                |          |--|timeout()   |                                  |      |
+ * |   |    |     post()     |          | \|/           |     post()                       |      |
+ * |   |    |    |---------- | --�DISPATCHED�---------- | --------------COMPLETING�-----|  |      |
+ * |   |    |    |           |   /|\/|\ |               |                | /|\ /|\      |  |      |
+ * |   |    |    |    |---�- | ---|  |  |startAsync()   |       timeout()|--|   |       |  |      |
+ * |   |    ^    ^    |      |       |  |               |                       |       |  ^      |
+ * |   |    |    |    |   |-- \ -----|  |   complete()  |                       |post() |  |      |
+ * |   |    |    |    |   |    \        |     /--�----- | ---COMPLETE_PENDING-�-|       ^  |      |
+ * |   |    |    |    |   |     \       |    /          |                               |  |      |
+ * |   |    |    |    |   ^      \      |   /           |                               |  |      |
+ * |  \|/   |    |    |   |       \    \|/ /   post()   |                    complete() |  |      |
+ * | MUST_COMPLETE-�- | - | --�----STARTING--�--------- | ------------|       /---�-----|  |      |
+ * |  /|\    /|\      |   |  complete()  | \            |             |      /             |      ^
+ * |   |      |       |   |              |  \           |    post()   |     /   error()    |      |
+ * |   |      |       ^   |    dispatch()|   \          |    |-----|  |    //------�-------|      |
+ * |   |      |       |   |              |    \         |    |     |  |   //                      |
+ * |   |      |       |   |             \|/    \        |    |    \|/\|/ //       post()          |
  * |   |      |       |   |--�--MUST_DISPATCH-----�-----|    |--�--STARTED�---------�---------|   |
  * |   |      |       | dispatched() /|\   |     \                / |   |                     |   |
  * |   |      |       |               |    |      \              /  |   |                     |   |
@@ -386,6 +386,7 @@ public class AsyncStateMachine {
 
     public synchronized void asyncError() {
         if (state == AsyncState.STARTING ||
+                state == AsyncState.STARTED ||
                 state == AsyncState.DISPATCHED ||
                 state == AsyncState.TIMING_OUT ||
                 state == AsyncState.MUST_COMPLETE ||

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1767471&r1=1767470&r2=1767471&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Nov  1 10:21:20 2016
@@ -165,6 +165,11 @@
         use. The values used by the executor may be set and obtained via the
         Executor. (markt)
       </fix>
+      <fix>
+        If an I/O error occurs during async processing on a non-container
+        thread, ensure that the <code>onError()</code> event is triggered.
+        (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">



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