Author: markt Date: Thu Apr 13 13:50:22 2017 New Revision: 1791253 URL: http://svn.apache.org/viewvc?rev=1791253&view=rev Log: Fix a theoretical problem where the connection count could exceed the limit during shutdown.
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/Acceptor.java tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1791253&r1=1791252&r2=1791253&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Thu Apr 13 13:50:22 2017 @@ -986,6 +986,7 @@ public abstract class AbstractEndpoint<S public void pause() { if (running && !paused) { paused = true; + releaseConnectionLatch(); unlockAccept(); getHandler().pause(); } @@ -1026,7 +1027,7 @@ public abstract class AbstractEndpoint<S return connectionLimitLatch; } - protected void releaseConnectionLatch() { + private void releaseConnectionLatch() { LimitLatch latch = connectionLimitLatch; if (latch!=null) latch.releaseAll(); connectionLimitLatch = null; Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Acceptor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Acceptor.java?rev=1791253&r1=1791252&r2=1791253&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/Acceptor.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/Acceptor.java Thu Apr 13 13:50:22 2017 @@ -82,6 +82,12 @@ public class Acceptor<U> implements Runn //if we have reached max connections, wait endpoint.countUpOrAwaitConnection(); + // Endpoint might have been paused while waiting for latch + // If that is the case, don't accept new connections + if (endpoint.isPaused()) { + continue; + } + U socket = null; try { // Accept the next incoming connection from the server Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1791253&r1=1791252&r2=1791253&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Thu Apr 13 13:50:22 2017 @@ -625,7 +625,6 @@ public class AprEndpoint extends Abstrac */ @Override public void stopInternal() { - releaseConnectionLatch(); if (!paused) { pause(); } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1791253&r1=1791252&r2=1791253&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Thu Apr 13 13:50:22 2017 @@ -190,7 +190,6 @@ public class Nio2Endpoint extends Abstra */ @Override public void stopInternal() { - releaseConnectionLatch(); if (!paused) { pause(); } Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1791253&r1=1791252&r2=1791253&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Thu Apr 13 13:50:22 2017 @@ -267,7 +267,6 @@ public class NioEndpoint extends Abstrac */ @Override public void stopInternal() { - releaseConnectionLatch(); if (!paused) { pause(); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org