Allocate a new Timer if component is restarted
Change-Id: I8f7487d636a95613a2e6aa311987a908de21df16
diff --git a/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java b/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java
index 7061260..b2e921f 100644
--- a/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java
+++ b/utils/misc/src/main/java/org/onlab/util/SharedExecutors.java
@@ -39,18 +39,10 @@
public static final int DEFAULT_POOL_SIZE = 30;
- private static SharedExecutorService singleThreadExecutor =
- new SharedExecutorService(
- newSingleThreadExecutor(groupedThreads("onos/shared",
- "onos-single-executor")));
+ private static SharedExecutorService singleThreadExecutor;
+ private static SharedExecutorService poolThreadExecutor;
- private static SharedExecutorService poolThreadExecutor =
- new SharedExecutorService(
- newFixedThreadPool(DEFAULT_POOL_SIZE,
- groupedThreads("onos/shared",
- "onos-pool-executor-%d")));
-
- private static SharedTimer sharedTimer = new SharedTimer();
+ private static SharedTimer sharedTimer;
// Ban public construction
private SharedExecutors() {
@@ -62,6 +54,7 @@
* @return shared single thread executor
*/
public static ExecutorService getSingleThreadExecutor() {
+ setup();
return singleThreadExecutor;
}
@@ -71,6 +64,7 @@
* @return shared executor pool
*/
public static ExecutorService getPoolThreadExecutor() {
+ setup();
return poolThreadExecutor;
}
@@ -80,6 +74,7 @@
* @return shared timer
*/
public static Timer getTimer() {
+ setup();
return sharedTimer;
}
@@ -114,6 +109,26 @@
sharedTimer.shutdown();
singleThreadExecutor.backingExecutor().shutdown();
poolThreadExecutor.backingExecutor().shutdown();
+ sharedTimer = null;
+ singleThreadExecutor = null;
+ poolThreadExecutor = null;
+ }
+
+ private static synchronized void setup() {
+ if (sharedTimer == null) {
+ sharedTimer = new SharedTimer();
+
+ singleThreadExecutor =
+ new SharedExecutorService(
+ newSingleThreadExecutor(groupedThreads("onos/shared",
+ "onos-single-executor")));
+
+ poolThreadExecutor =
+ new SharedExecutorService(
+ newFixedThreadPool(DEFAULT_POOL_SIZE,
+ groupedThreads("onos/shared",
+ "onos-pool-executor-%d")));
+ }
}
// Timer extension which does not allow outside cancel method.