Mark, On 2/14/15 11:40 AM, ma...@apache.org wrote: > Author: markt > Date: Sat Feb 14 16:40:20 2015 > New Revision: 1659806 > > URL: http://svn.apache.org/r1659806 > Log: > Fix a concurrency issue in the APR Poller that meant it was possible under > low load for a socket queued to be added to the Poller not to be added for 10 > seconds.
*Low* load? If only that were a big problem for everyone :) -chris > Modified: > tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java > > 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=1659806&r1=1659805&r2=1659806&view=diff > ============================================================================== > --- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original) > +++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Sat Feb 14 > 16:40:20 2015 > @@ -1636,7 +1636,15 @@ public class AprEndpoint extends Abstrac > maintain(); > } > synchronized (this) { > - this.wait(10000); > + // Make sure that no sockets have been placed in > the > + // addList or closeList since the check above. > + // Without this check there could be a 10s pause > + // with no processing since the notify() call in > + // add()/close() would have no effect since it > + // happened before this sync block was entered > + if (addList.size() < 1 && closeList.size() < 1) { > + this.wait(10000); > + } > } > } catch (InterruptedException e) { > // Ignore > @@ -1654,25 +1662,25 @@ public class AprEndpoint extends Abstrac > try { > // Duplicate the add and remove lists so that the syncs > are > // minimised > - if (closeList.size() > 0) { > - synchronized (this) { > + synchronized (this) { > + if (closeList.size() > 0) { > // Duplicate to another list, so that the > syncing is > // minimal > closeList.duplicate(localCloseList); > closeList.clear(); > + } else { > + localCloseList.clear(); > } > - } else { > - localCloseList.clear(); > } > - if (addList.size() > 0) { > - synchronized (this) { > + synchronized (this) { > + if (addList.size() > 0) { > // Duplicate to another list, so that the > syncing is > // minimal > addList.duplicate(localAddList); > addList.clear(); > + } else { > + localAddList.clear(); > } > - } else { > - localAddList.clear(); > } > > // Remove sockets > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org >
signature.asc
Description: OpenPGP digital signature