Fixed potentially thread unsafe initialization.
Change-Id: I047bcd9358a544723603a069faa234c00ba6b757
diff --git a/core/api/src/main/java/org/onlab/onos/ApplicationId.java b/core/api/src/main/java/org/onlab/onos/ApplicationId.java
index f345607..433265e 100644
--- a/core/api/src/main/java/org/onlab/onos/ApplicationId.java
+++ b/core/api/src/main/java/org/onlab/onos/ApplicationId.java
@@ -8,7 +8,7 @@
*/
public final class ApplicationId {
- private static AtomicInteger idDispenser;
+ private static final AtomicInteger ID_DISPENCER = new AtomicInteger(1);
private final Integer id;
// Ban public construction
@@ -50,10 +50,7 @@
* @return app id
*/
public static ApplicationId getAppId() {
- if (ApplicationId.idDispenser == null) {
- ApplicationId.idDispenser = new AtomicInteger(1);
- }
- return new ApplicationId(ApplicationId.idDispenser.getAndIncrement());
+ return new ApplicationId(ApplicationId.ID_DISPENCER.getAndIncrement());
}
}
diff --git a/utils/misc/src/main/java/org/onlab/util/Timer.java b/utils/misc/src/main/java/org/onlab/util/Timer.java
index 276138f..7719fa1 100644
--- a/utils/misc/src/main/java/org/onlab/util/Timer.java
+++ b/utils/misc/src/main/java/org/onlab/util/Timer.java
@@ -8,7 +8,7 @@
*/
public final class Timer {
- private static HashedWheelTimer timer;
+ private static volatile HashedWheelTimer timer;
// Ban public construction
private Timer() {
@@ -21,10 +21,16 @@
*/
public static HashedWheelTimer getTimer() {
if (Timer.timer == null) {
+ initTimer();
+ }
+ return Timer.timer;
+ }
+
+ private static synchronized void initTimer() {
+ if (Timer.timer == null) {
Timer.timer = new HashedWheelTimer();
Timer.timer.start();
}
- return Timer.timer;
}
}