You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2016/12/05 08:54:49 UTC
svn commit: r1772603 - in /tomcat/trunk/java/org/apache/coyote/http2:
Http2UpgradeHandler.java StreamProcessor.java StreamRunnable.java
Author: markt
Date: Mon Dec 5 08:54:49 2016
New Revision: 1772603
URL: http://svn.apache.org/viewvc?rev=1772603&view=rev
Log:
Extract the Runnable implementation from the StreamProcessor
Added:
tomcat/trunk/java/org/apache/coyote/http2/StreamRunnable.java
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=1772603&r1=1772602&r2=1772603&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Mon Dec 5 08:54:49 2016
@@ -144,7 +144,7 @@ class Http2UpgradeHandler extends Abstra
// Stream concurrency control
private int maxConcurrentStreamExecution = Http2Protocol.DEFAULT_MAX_CONCURRENT_STREAM_EXECUTION;
private AtomicInteger streamConcurrency = null;
- private Queue<StreamProcessor> queuedProcessors = null;
+ private Queue<StreamRunnable> queuedRunnable = null;
// Limits
private Set<String> allowedTrailerHeaders = Collections.emptySet();
@@ -191,7 +191,7 @@ class Http2UpgradeHandler extends Abstra
// Init concurrency control if needed
if (maxConcurrentStreamExecution < localSettings.getMaxConcurrentStreams()) {
streamConcurrency = new AtomicInteger(0);
- queuedProcessors = new ConcurrentLinkedQueue<>();
+ queuedRunnable = new ConcurrentLinkedQueue<>();
}
parser = new Http2Parser(connectionId, this, this);
@@ -268,15 +268,16 @@ 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);
if (streamConcurrency == null) {
- socketWrapper.getEndpoint().getExecutor().execute(streamProcessor);
+ socketWrapper.getEndpoint().getExecutor().execute(streamRunnable);
} else {
if (getStreamConcurrency() < maxConcurrentStreamExecution) {
increaseStreamConcurrency();
- socketWrapper.getEndpoint().getExecutor().execute(streamProcessor);
+ socketWrapper.getEndpoint().getExecutor().execute(streamRunnable);
} else {
- queuedProcessors.offer(streamProcessor);
+ queuedRunnable.offer(streamRunnable);
}
}
}
@@ -440,10 +441,10 @@ class Http2UpgradeHandler extends Abstra
}
decreaseStreamConcurrency();
if (getStreamConcurrency() < maxConcurrentStreamExecution) {
- StreamProcessor streamProcessor = queuedProcessors.poll();
- if (streamProcessor != null) {
+ StreamRunnable streamRunnable = queuedRunnable.poll();
+ if (streamRunnable != null) {
increaseStreamConcurrency();
- socketWrapper.getEndpoint().getExecutor().execute(streamProcessor);
+ socketWrapper.getEndpoint().getExecutor().execute(streamRunnable);
}
}
}
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=1772603&r1=1772602&r2=1772603&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamProcessor.java Mon Dec 5 08:54:49 2016
@@ -32,7 +32,7 @@ import org.apache.tomcat.util.net.Socket
import org.apache.tomcat.util.net.SocketWrapperBase;
import org.apache.tomcat.util.res.StringManager;
-class StreamProcessor extends AbstractProcessor implements Runnable {
+class StreamProcessor extends AbstractProcessor {
private static final Log log = LogFactory.getLog(StreamProcessor.class);
private static final StringManager sm = StringManager.getManager(StreamProcessor.class);
@@ -50,8 +50,7 @@ class StreamProcessor extends AbstractPr
}
- @Override
- public final void run() {
+ final void process(SocketEvent event) {
try {
// FIXME: the regular processor syncs on socketWrapper, but here this deadlocks
synchronized (this) {
@@ -60,7 +59,7 @@ class StreamProcessor extends AbstractPr
ContainerThreadMarker.set();
SocketState state = SocketState.CLOSED;
try {
- state = process(socketWrapper, SocketEvent.OPEN_READ);
+ state = process(socketWrapper, event);
if (state == SocketState.CLOSED) {
if (!getErrorState().isConnectionIoAllowed()) {
@@ -170,7 +169,8 @@ class StreamProcessor extends AbstractPr
@Override
protected final void executeDispatches(SocketWrapperBase<?> wrapper) {
- wrapper.getEndpoint().getExecutor().execute(this);
+ StreamRunnable streamRunnable = new StreamRunnable(this, SocketEvent.OPEN_READ);
+ wrapper.getEndpoint().getExecutor().execute(streamRunnable);
}
Added: tomcat/trunk/java/org/apache/coyote/http2/StreamRunnable.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamRunnable.java?rev=1772603&view=auto
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamRunnable.java (added)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamRunnable.java Mon Dec 5 08:54:49 2016
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.coyote.http2;
+
+import org.apache.tomcat.util.net.SocketEvent;
+
+class StreamRunnable implements Runnable {
+
+ private final StreamProcessor processor;
+ private final SocketEvent event;
+
+
+ public StreamRunnable(StreamProcessor processor, SocketEvent event) {
+ this.processor = processor;
+ this.event = event;
+ }
+
+
+ @Override
+ public void run() {
+ processor.process(event);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org