Author: remm
Date: Thu Nov 16 14:11:53 2017
New Revision: 1815456
URL: http://svn.apache.org/viewvc?rev=1815456&view=rev
Log:
Improvement on header write sync.
Modified:
tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
Modified:
tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java?rev=1815456&r1=1815455&r2=1815456&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2AsyncUpgradeHandler.java Thu
Nov 16 14:11:53 2017
@@ -31,6 +31,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.coyote.Adapter;
import org.apache.coyote.ProtocolException;
import org.apache.coyote.Request;
+import org.apache.tomcat.util.http.MimeHeaders;
import org.apache.tomcat.util.net.SendfileState;
import org.apache.tomcat.util.net.SocketWrapperBase;
import org.apache.tomcat.util.net.SocketWrapperBase.BlockingMode;
@@ -149,6 +150,28 @@ public class Http2AsyncUpgradeHandler ex
@Override
+ void writeHeaders(Stream stream, int pushedStreamId, MimeHeaders
mimeHeaders,
+ boolean endOfStream, int payloadSize) throws IOException {
+ // This ensures the Stream processing thread has control of the socket.
+ ByteBuffer[] bufs = null;
+ synchronized (socketWrapper) {
+ AsyncHeaderFrameBuffers headerFrameBuffers =
(AsyncHeaderFrameBuffers)
+ doWriteHeaders(stream, pushedStreamId, mimeHeaders,
endOfStream, payloadSize);
+ bufs = headerFrameBuffers.bufs.toArray(BYTEBUFFER_ARRAY);
+ }
+ if (bufs != null) {
+ socketWrapper.write(BlockingMode.SEMI_BLOCK,
protocol.getWriteTimeout(),
+ TimeUnit.MILLISECONDS, null,
SocketWrapperBase.COMPLETE_WRITE,
+ applicationErrorCompletion, bufs);
+ handleAsyncException();
+ }
+ if (endOfStream) {
+ stream.sentEndOfStream();
+ }
+ }
+
+
+ @Override
protected HeaderFrameBuffers getHeaderFrameBuffers(int initialPayloadSize)
{
return new AsyncHeaderFrameBuffers(initialPayloadSize);
}
@@ -451,10 +474,6 @@ public class Http2AsyncUpgradeHandler ex
@Override
public void endHeaders() throws IOException {
- socketWrapper.write(BlockingMode.SEMI_BLOCK,
protocol.getWriteTimeout(),
- TimeUnit.MILLISECONDS, null,
SocketWrapperBase.COMPLETE_WRITE,
- applicationErrorCompletion,
bufs.toArray(BYTEBUFFER_ARRAY));
- handleAsyncException();
}
@Override
@@ -470,6 +489,7 @@ public class Http2AsyncUpgradeHandler ex
@Override
public void expandPayload() {
payloadSize = payloadSize * 2;
+ payload = ByteBuffer.allocate(payloadSize);
}
}
}
Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1815456&r1=1815455&r2=1815456&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Thu Nov
16 14:11:53 2017
@@ -539,7 +539,7 @@ class Http2UpgradeHandler extends Abstra
* Separate method to allow Http2AsyncUpgradeHandler to call this code
* without synchronizing on socketWrapper since it doesn't need to.
*/
- void doWriteHeaders(Stream stream, int pushedStreamId, MimeHeaders
mimeHeaders,
+ protected HeaderFrameBuffers doWriteHeaders(Stream stream, int
pushedStreamId, MimeHeaders mimeHeaders,
boolean endOfStream, int payloadSize) throws IOException {
if (log.isDebugEnabled()) {
@@ -549,7 +549,7 @@ class Http2UpgradeHandler extends Abstra
}
if (!stream.canWrite()) {
- return;
+ return null;
}
HeaderFrameBuffers headerFrameBuffers =
getHeaderFrameBuffers(payloadSize);
@@ -598,9 +598,9 @@ class Http2UpgradeHandler extends Abstra
}
}
headerFrameBuffers.endHeaders();
+ return headerFrameBuffers;
}
-
protected HeaderFrameBuffers getHeaderFrameBuffers(int initialPayloadSize)
{
return new DefaultHeaderFrameBuffers(initialPayloadSize);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]