This is an automated email from the ASF dual-hosted git repository. markt pushed a commit to branch 7.0.x in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/7.0.x by this push: new b6bba7b Temporary fix. Deadlock in the recently added async state tests b6bba7b is described below commit b6bba7b9b364dad5f740042f0a6252a14eb0016a Author: Mark Thomas <ma...@apache.org> AuthorDate: Wed Oct 16 10:05:42 2019 +0100 Temporary fix. Deadlock in the recently added async state tests Removing this sync fixes the deadlock but re-introduces bug 49884. On the basis that a 10s delay is better than a deadlock I am applying this temporary fix (mainly to allow the CI to complete) while I investigate a solution that creates neither delay nor deadlock. --- java/org/apache/tomcat/util/net/AprEndpoint.java | 56 ++++++++++++------------ 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/java/org/apache/tomcat/util/net/AprEndpoint.java b/java/org/apache/tomcat/util/net/AprEndpoint.java index 4d8fd25..10f1eb9 100644 --- a/java/org/apache/tomcat/util/net/AprEndpoint.java +++ b/java/org/apache/tomcat/util/net/AprEndpoint.java @@ -975,35 +975,33 @@ public class AprEndpoint extends AbstractEndpoint<Long> { public void processSocketAsync(SocketWrapper<Long> socket, SocketStatus status) { try { - synchronized (socket) { - if (waitingRequests.remove(socket)) { - SocketProcessor proc = new SocketProcessor(socket, status); - ClassLoader loader = Thread.currentThread().getContextClassLoader(); - try { - //threads should not be created by the webapp classloader - if (Constants.IS_SECURITY_ENABLED) { - PrivilegedAction<Void> pa = new PrivilegedSetTccl( - getClass().getClassLoader()); - AccessController.doPrivileged(pa); - } else { - Thread.currentThread().setContextClassLoader( - getClass().getClassLoader()); - } - Executor executor = getExecutor(); - if (executor == null) { - log.warn(sm.getString("endpoint.warn.noExector", - socket, status)); - return; - } else { - executor.execute(proc); - } - } finally { - if (Constants.IS_SECURITY_ENABLED) { - PrivilegedAction<Void> pa = new PrivilegedSetTccl(loader); - AccessController.doPrivileged(pa); - } else { - Thread.currentThread().setContextClassLoader(loader); - } + if (waitingRequests.remove(socket)) { + SocketProcessor proc = new SocketProcessor(socket, status); + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + try { + //threads should not be created by the webapp classloader + if (Constants.IS_SECURITY_ENABLED) { + PrivilegedAction<Void> pa = new PrivilegedSetTccl( + getClass().getClassLoader()); + AccessController.doPrivileged(pa); + } else { + Thread.currentThread().setContextClassLoader( + getClass().getClassLoader()); + } + Executor executor = getExecutor(); + if (executor == null) { + log.warn(sm.getString("endpoint.warn.noExector", + socket, status)); + return; + } else { + executor.execute(proc); + } + } finally { + if (Constants.IS_SECURITY_ENABLED) { + PrivilegedAction<Void> pa = new PrivilegedSetTccl(loader); + AccessController.doPrivileged(pa); + } else { + Thread.currentThread().setContextClassLoader(loader); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org