Author: markt Date: Fri Sep 25 21:05:53 2015 New Revision: 1705353 URL: http://svn.apache.org/viewvc?rev=1705353&view=rev Log: Start thinking about non-blocking reads
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=1705353&r1=1705352&r2=1705353&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Stream.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Stream.java Fri Sep 25 21:05:53 2015 @@ -292,6 +292,11 @@ public class Stream extends AbstractStre } + StreamInputBuffer getInputBuffer() { + return inputBuffer; + } + + StreamOutputBuffer getOutputBuffer() { return outputBuffer; } @@ -473,6 +478,7 @@ public class Stream extends AbstractStre // This buffer is the destination for incoming data. It is normally is // 'write mode'. private volatile ByteBuffer inBuffer; + private volatile boolean readInterest; @Override public int doRead(ByteChunk chunk) throws IOException { @@ -519,6 +525,28 @@ public class Stream extends AbstractStre } + boolean isReady() { + synchronized (inBuffer) { + if (inBuffer.position() == 0) { + readInterest = true; + return false; + } else { + return true; + } + } + } + + + synchronized boolean isRegisteredForRead() { + if (readInterest) { + readInterest = false; + return true; + } else { + return false; + } + } + + public ByteBuffer getInBuffer() { ensureBuffersExist(); return inBuffer; @@ -526,13 +554,12 @@ public class Stream extends AbstractStre private void ensureBuffersExist() { - if (inBuffer != null) { - return; - } - synchronized (this) { - if (inBuffer == null) { - inBuffer = ByteBuffer.allocate(16 * 1024); - outBuffer = new byte[16 * 1024]; + if (inBuffer == null) { + synchronized (this) { + if (inBuffer == null) { + inBuffer = ByteBuffer.allocate(16 * 1024); + outBuffer = new byte[16 * 1024]; + } } } } 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=1705353&r1=1705352&r2=1705353&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Fri Sep 25 21:05:53 2015 @@ -298,6 +298,11 @@ public class StreamProcessor extends Abs result.set(stream.isInputFinished()); break; } + case NB_READ_INTEREST: { + AtomicBoolean result = (AtomicBoolean) param; + result.set(stream.getInputBuffer().isReady()); + break; + } case NB_WRITE_INTEREST: { AtomicBoolean result = (AtomicBoolean) param; result.set(stream.getOutputBuffer().isReady()); @@ -327,7 +332,6 @@ public class StreamProcessor extends Abs case CLOSE_NOW: case DISABLE_SWALLOW_INPUT: case END_REQUEST: - case NB_READ_INTEREST: case REQ_SET_BODY_REPLAY: case RESET: log.info("TODO: Implement [" + actionCode + "] for HTTP/2"); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org