Author: markt Date: Thu Sep 24 15:58:32 2015 New Revision: 1705091 URL: http://svn.apache.org/viewvc?rev=1705091&view=rev Log: Start on non-blocking I/O support.
Modified: tomcat/trunk/java/org/apache/coyote/http2/Stream.java tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.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=1705091&r1=1705090&r2=1705091&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:58:32 2015 @@ -298,6 +298,10 @@ public class Stream extends AbstractStre } + boolean isInputFinished() { + return !state.isFrameTypePermitted(FrameType.DATA); + } + class StreamOutputBuffer implements OutputBuffer { private final ByteBuffer buffer = ByteBuffer.allocate(8 * 1024); @@ -428,11 +432,11 @@ public class Stream extends AbstractStre ensureBuffersExist(); - int written = 0; + int written = -1; // Ensure that only one thread accesses inBuffer at a time synchronized (inBuffer) { - while (inBuffer.position() == 0 && state.isFrameTypePermitted(FrameType.DATA)) { + while (inBuffer.position() == 0 && !isInputFinished()) { // Need to block until some data is written try { inBuffer.wait(); @@ -450,7 +454,7 @@ public class Stream extends AbstractStre written = inBuffer.remaining(); inBuffer.get(outBuffer, 0, written); inBuffer.clear(); - } else if (!state.isFrameTypePermitted(FrameType.DATA)) { + } else if (isInputFinished()) { return -1; } else { // Should never happen 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=1705091&r1=1705090&r2=1705091&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:58:32 2015 @@ -259,6 +259,14 @@ public class StreamProcessor extends Abs break; } + // Servlet 3.1 non-blocking I/O + case REQUEST_BODY_FULLY_READ: { + AtomicBoolean result = (AtomicBoolean) param; + result.set(stream.isInputFinished()); + break; + } + + // Unsupported / illegal under HTTP/2 case UPGRADE: throw new UnsupportedOperationException( @@ -275,7 +283,6 @@ public class StreamProcessor extends Abs case END_REQUEST: case NB_READ_INTEREST: case NB_WRITE_INTEREST: - case REQUEST_BODY_FULLY_READ: case REQ_SET_BODY_REPLAY: case RESET: log.info("TODO: Implement [" + actionCode + "] for HTTP/2"); Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java?rev=1705091&r1=1705090&r2=1705091&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java Thu Sep 24 15:58:32 2015 @@ -104,8 +104,8 @@ public class StreamStateMachine { public synchronized void checkFrameType(FrameType frameType) throws Http2Exception { - // No state change. Checks that the frame type is valid for the current - // state of this stream. + // No state change. Checks that receiving the frame type is valid for + // the current state of this stream. if (!isFrameTypePermitted(frameType)) { if (state.connectionErrorForInvalidFrame) { throw new ConnectionException(sm.getString("streamStateMachine.invalidFrame", --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org