Author: markt Date: Mon Dec 5 09:00:52 2016 New Revision: 1772606 URL: http://svn.apache.org/viewvc?rev=1772606&view=rev Log: Partial fix for async with HTTP/2
Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java 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=1772606&r1=1772605&r2=1772606&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Mon Dec 5 09:00:52 2016 @@ -268,8 +268,13 @@ class Http2UpgradeHandler extends Abstra private void processStreamOnContainerThread(Stream stream) { StreamProcessor streamProcessor = new StreamProcessor(this, stream, adapter, socketWrapper); - StreamRunnable streamRunnable = new StreamRunnable(streamProcessor, SocketEvent.OPEN_READ); streamProcessor.setSslSupport(sslSupport); + processStreamOnContainerThread(streamProcessor, SocketEvent.OPEN_READ); + } + + + void processStreamOnContainerThread(StreamProcessor streamProcessor, SocketEvent event) { + StreamRunnable streamRunnable = new StreamRunnable(streamProcessor, event); if (streamConcurrency == null) { socketWrapper.getEndpoint().getExecutor().execute(streamRunnable); } else { 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=1772606&r1=1772605&r2=1772606&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Mon Dec 5 09:00:52 2016 @@ -17,6 +17,7 @@ package org.apache.coyote.http2; import java.io.IOException; +import java.util.Iterator; import org.apache.coyote.AbstractProcessor; import org.apache.coyote.ActionCode; @@ -28,6 +29,7 @@ import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.buf.ByteChunk; import org.apache.tomcat.util.net.AbstractEndpoint.Handler.SocketState; +import org.apache.tomcat.util.net.DispatchType; import org.apache.tomcat.util.net.SocketEvent; import org.apache.tomcat.util.net.SocketWrapperBase; import org.apache.tomcat.util.res.StringManager; @@ -150,6 +152,16 @@ class StreamProcessor extends AbstractPr @Override + protected void processSocketEvent(SocketEvent event, boolean dispatch) { + if (dispatch) { + handler.processStreamOnContainerThread(this, event); + } else { + this.process(event); + } + } + + + @Override protected final boolean isRequestBodyFullyRead() { return stream.getInputBuffer().isRequestBodyFullyRead(); } @@ -169,8 +181,17 @@ class StreamProcessor extends AbstractPr @Override protected final void executeDispatches() { - StreamRunnable streamRunnable = new StreamRunnable(this, SocketEvent.OPEN_READ); - getSocketWrapper().getEndpoint().getExecutor().execute(streamRunnable); + Iterator<DispatchType> dispatches = getIteratorAndClearDispatches(); + synchronized (this) { + /* + * TODO Check if this sync is necessary. + * Compare with superrclass that uses SocketWrapper + */ + while (dispatches != null && dispatches.hasNext()) { + DispatchType dispatchType = dispatches.next(); + processSocketEvent(dispatchType.getSocketStatus(), false); + } + } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org