Author: markt Date: Fri Aug 23 09:00:31 2013 New Revision: 1516756 URL: http://svn.apache.org/r1516756 Log: Ensure that there is only ever one recovery thread running at a time. It was pretty much impossible for this to happen with the previous code but there was a very small window where two threads could have been started. This change guarantees there is only ever one recovery thread.
Modified: tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java Modified: tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java?rev=1516756&r1=1516755&r2=1516756&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java (original) +++ tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java Fri Aug 23 09:00:31 2013 @@ -28,6 +28,7 @@ import java.net.SocketTimeoutException; import java.util.Arrays; import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.catalina.tribes.Channel; import org.apache.catalina.tribes.Member; @@ -580,14 +581,18 @@ public class McastServiceImpl }//class SenderThread protected static class RecoveryThread extends Thread { - static volatile boolean running = false; + + private static final AtomicBoolean running = new AtomicBoolean(false); public static synchronized void recover(McastServiceImpl parent) { - if (running) return; - if (!parent.isRecoveryEnabled()) + + if (!parent.isRecoveryEnabled()) { return; + } - running = true; + if (!running.compareAndSet(false, true)) { + return; + } Thread t = new RecoveryThread(parent); @@ -644,7 +649,7 @@ public class McastServiceImpl } } }finally { - running = false; + running.set(false); } } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org