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: [email protected]
For additional commands, e-mail: [email protected]