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/14 11:07:28 UTC
svn commit: r1774195 - in /tomcat/trunk/java/org/apache:
coyote/AbstractProcessor.java coyote/http2/Http2UpgradeHandler.java
tomcat/util/net/SocketWrapperBase.java
tomcat/websocket/server/WsRemoteEndpointImplServer.java
Author: markt
Date: Wed Dec 14 11:07:28 2016
New Revision: 1774195
URL: http://svn.apache.org/viewvc?rev=1774195&view=rev
Log:
Don't expose Executor directly via SocketWrapper
Reduce exposure of Endpoint via SocketWrapper to package
Modified:
tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java
tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java?rev=1774195&r1=1774194&r2=1774195&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProcessor.java Wed Dec 14 11:07:28 2016
@@ -160,7 +160,7 @@ public abstract class AbstractProcessor
if (socketWrapper == null) {
throw new RejectedExecutionException(sm.getString("abstractProcessor.noExecute"));
} else {
- socketWrapper.getExecutor().execute(runnable);
+ socketWrapper.execute(runnable);
}
}
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=1774195&r1=1774194&r2=1774195&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Wed Dec 14 11:07:28 2016
@@ -276,11 +276,11 @@ class Http2UpgradeHandler extends Abstra
void processStreamOnContainerThread(StreamProcessor streamProcessor, SocketEvent event) {
StreamRunnable streamRunnable = new StreamRunnable(streamProcessor, event);
if (streamConcurrency == null) {
- socketWrapper.getExecutor().execute(streamRunnable);
+ socketWrapper.execute(streamRunnable);
} else {
if (getStreamConcurrency() < maxConcurrentStreamExecution) {
increaseStreamConcurrency();
- socketWrapper.getExecutor().execute(streamRunnable);
+ socketWrapper.execute(streamRunnable);
} else {
queuedRunnable.offer(streamRunnable);
}
@@ -449,7 +449,7 @@ class Http2UpgradeHandler extends Abstra
StreamRunnable streamRunnable = queuedRunnable.poll();
if (streamRunnable != null) {
increaseStreamConcurrency();
- socketWrapper.getExecutor().execute(streamRunnable);
+ socketWrapper.execute(streamRunnable);
}
}
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java?rev=1774195&r1=1774194&r2=1774195&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SocketWrapperBase.java Wed Dec 14 11:07:28 2016
@@ -22,6 +22,7 @@ import java.nio.channels.CompletionHandl
import java.util.Iterator;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingDeque;
+import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -103,12 +104,23 @@ public abstract class SocketWrapperBase<
return socket;
}
- public AbstractEndpoint<E,?> getEndpoint() {
+ protected AbstractEndpoint<E,?> getEndpoint() {
return endpoint;
}
- public Executor getExecutor() {
- return endpoint.getExecutor();
+ /**
+ * Transfers processing to a container thread.
+ *
+ * @param runnable The actions to process on a container thread
+ *
+ * @throws RejectedExecutionException If the runnable cannot be executed
+ */
+ public void execute(Runnable runnable) {
+ Executor executor = endpoint.getExecutor();
+ if (!endpoint.isRunning() || executor == null) {
+ throw new RejectedExecutionException();
+ }
+ executor.execute(runnable);
}
public IOException getError() { return error; }
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java?rev=1774195&r1=1774194&r2=1774195&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java Wed Dec 14 11:07:28 2016
@@ -20,14 +20,13 @@ import java.io.EOFException;
import java.io.IOException;
import java.net.SocketTimeoutException;
import java.nio.ByteBuffer;
-import java.util.concurrent.Executor;
+import java.util.concurrent.RejectedExecutionException;
import javax.websocket.SendHandler;
import javax.websocket.SendResult;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
-import org.apache.tomcat.util.net.AbstractEndpoint;
import org.apache.tomcat.util.net.SocketWrapperBase;
import org.apache.tomcat.util.res.StringManager;
import org.apache.tomcat.websocket.Transformation;
@@ -222,11 +221,9 @@ public class WsRemoteEndpointImplServer
if (sh != null) {
if (useDispatch) {
OnResultRunnable r = new OnResultRunnable(sh, t);
- AbstractEndpoint<?,?> endpoint = socketWrapper.getEndpoint();
- Executor containerExecutor = socketWrapper.getExecutor();
- if (endpoint.isRunning() && containerExecutor != null) {
- containerExecutor.execute(r);
- } else {
+ try {
+ socketWrapper.execute(r);
+ } catch (RejectedExecutionException ree) {
// Can't use the executor so call the runnable directly.
// This may not be strictly specification compliant in all
// cases but during shutdown only close messages are going
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org