Author: markt
Date: Tue Nov  1 15:23:13 2016
New Revision: 1767505

URL: http://svn.apache.org/viewvc?rev=1767505&view=rev
Log:
Improve detection of I/O errors during async processing on non-container 
threads and trigger async error handling when they are detected.

Modified:
    tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
    tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
    tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.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=1767505&r1=1767504&r2=1767505&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Tue Nov  1 
15:23:13 2016
@@ -310,7 +310,11 @@ public abstract class AbstractProcessor
         case CLOSE_NOW: {
             // Prevent further writes to the response
             setSwallowResponse();
-            setErrorState(ErrorState.CLOSE_NOW, null);
+            if (param instanceof Throwable) {
+                setErrorState(ErrorState.CLOSE_NOW, (Throwable) param);
+            } else {
+                setErrorState(ErrorState.CLOSE_NOW, null);
+            }
             break;
         }
         case DISABLE_SWALLOW_INPUT: {

Modified: tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java?rev=1767505&r1=1767504&r2=1767505&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/ajp/AjpProcessor.java Tue Nov  1 
15:23:13 2016
@@ -1392,9 +1392,15 @@ public class AjpProcessor extends Abstra
 
             int len = 0;
             if (!swallowResponse) {
-                len = chunk.remaining();
-                writeData(chunk);
-                len -= chunk.remaining();
+                try {
+                    len = chunk.remaining();
+                    writeData(chunk);
+                    len -= chunk.remaining();
+                } catch (IOException ioe) {
+                    setErrorState(ErrorState.CLOSE_CONNECTION_NOW, ioe);
+                    // Re-throw
+                    throw ioe;
+                }
             }
             return len;
         }

Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java?rev=1767505&r1=1767504&r2=1767505&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11OutputBuffer.java Tue Nov  
1 15:23:13 2016
@@ -535,11 +535,17 @@ public class Http11OutputBuffer implemen
          */
         @Override
         public int doWrite(ByteBuffer chunk) throws IOException {
-            int len = chunk.remaining();
-            socketWrapper.write(isBlocking(), chunk);
-            len -= chunk.remaining();
-            byteCount += len;
-            return len;
+            try {
+                int len = chunk.remaining();
+                socketWrapper.write(isBlocking(), chunk);
+                len -= chunk.remaining();
+                byteCount += len;
+                return len;
+            } catch (IOException ioe) {
+                response.action(ActionCode.CLOSE_NOW, ioe);
+                // Re-throw
+                throw ioe;
+            }
         }
 
         @Override

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1767505&r1=1767504&r2=1767505&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Tue Nov  1 15:23:13 2016
@@ -170,6 +170,10 @@
         thread, ensure that the <code>onError()</code> event is triggered.
         (markt)
       </fix>
+      <fix>
+        Improve detection of I/O errors during async processing on 
non-container
+        threads and trigger async error handling when they are detected. 
(markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Jasper">



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to