Author: markt
Date: Thu Sep 24 15:37:36 2015
New Revision: 1705082

URL: http://svn.apache.org/viewvc?rev=1705082&view=rev
Log:
Fix issues spotted while testing with async stock ticker example and curl
- Correctly handle errors during flush (e.g. triggered by client disconnect)
- Correctly handle end of async processing

Modified:
    tomcat/trunk/java/org/apache/coyote/http2/Stream.java
    tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java

Modified: tomcat/trunk/java/org/apache/coyote/http2/Stream.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Stream.java?rev=1705082&r1=1705081&r2=1705082&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Thu Sep 24 15:37:36 
2015
@@ -222,16 +222,11 @@ public class Stream extends AbstractStre
     }
 
 
-    void flushData() {
+    void flushData() throws IOException {
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("stream.write", getConnectionId(), 
getIdentifier()));
         }
-        try {
-            outputBuffer.flush();
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
-        }
+        outputBuffer.flush();
     }
 
 

Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java?rev=1705082&r1=1705081&r2=1705082&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Thu Sep 24 
15:37:36 2015
@@ -65,6 +65,11 @@ public class StreamProcessor extends Abs
             do {
                 if (asyncStateMachine.isAsync()) {
                     adapter.asyncDispatch(request, response, 
SocketStatus.OPEN_READ);
+                } else if (state == SocketState.ASYNC_END) {
+                    adapter.asyncDispatch(request, response, 
SocketStatus.OPEN_READ);
+                    // Only ever one request per stream so always treat as
+                    // closed at this point.
+                    state = SocketState.CLOSED;
                 } else {
                     adapter.service(request, response);
                 }
@@ -104,7 +109,12 @@ public class StreamProcessor extends Abs
         }
         case CLIENT_FLUSH: {
             action(ActionCode.COMMIT, null);
-            stream.flushData();
+            try {
+                stream.flushData();
+            } catch (IOException ioe) {
+                response.setErrorException(ioe);
+                // TODO: Shut stream down?
+            }
             break;
         }
         case 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