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 2015/03/10 21:10:45 UTC

svn commit: r1665672 - /tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java

Author: markt
Date: Tue Mar 10 20:10:45 2015
New Revision: 1665672

URL: http://svn.apache.org/r1665672
Log:
While looking at BZ 57653 I noticed a couple of places where modification to the addList and closeList was not protected by a sync. This could have led to corruption of these lists.

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=1665672&r1=1665671&r2=1665672&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Tue Mar 10 20:10:45 2015
@@ -1299,13 +1299,13 @@ public class AprEndpoint extends Abstrac
         /**
          * List of sockets to be added to the poller.
          */
-        private SocketList addList = null;
+        private SocketList addList = null;  // Modifications guarded by this
 
 
         /**
          * List of sockets to be closed.
          */
-        private SocketList closeList = null;
+        private SocketList closeList = null; // Modifications guarded by this
 
 
         /**
@@ -1340,7 +1340,7 @@ public class AprEndpoint extends Abstrac
          * Create the poller. With some versions of APR, the maximum poller size
          * will be 62 (recompiling APR is necessary to remove this limitation).
          */
-        protected void init() {
+        protected synchronized void init() {
 
             pool = Pool.create(serverSockPool);
 
@@ -1406,15 +1406,13 @@ public class AprEndpoint extends Abstrac
         /**
          * Destroy the poller.
          */
-        protected void destroy() {
+        protected synchronized void destroy() {
             // Wait for pollerTime before doing anything, so that the poller
             // threads exit, otherwise parallel destruction of sockets which are
             // still in the poller can cause problems
             try {
-                synchronized (this) {
-                    this.notify();
-                    this.wait(pollTime / 1000);
-                }
+                this.notify();
+                this.wait(pollTime / 1000);
             } catch (InterruptedException e) {
                 // Ignore
             }
@@ -1568,7 +1566,7 @@ public class AprEndpoint extends Abstrac
         /**
          * Timeout checks. Must only be called from {@link Poller#run()}.
          */
-        private void maintain() {
+        private synchronized void maintain() {
 
             long date = System.currentTimeMillis();
             // Maintain runs at most once every 1s, although it will likely get
@@ -1633,7 +1631,7 @@ public class AprEndpoint extends Abstrac
                         // Ignore
                     }
                 }
-                // Check timeouts if the poller is empty
+                // Check timeouts if the poller is empty.
                 while (pollerRunning && connectionCount.get() < 1 &&
                         addList.size() < 1 && closeList.size() < 1) {
                     // Reset maintain time.



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org