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

Reply via email to