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

Reply via email to