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