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 2013/08/23 11:00:32 UTC
svn commit: r1516756 -
/tomcat/trunk/java/org/apache/catalina/tribes/membership/McastServiceImpl.java
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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org