Fix a thread leak
Change-Id: I6a39abd634c2be684cf567c1f2b2e43d17f46fc3
diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index 0ab5ef0..00bfe93 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -496,6 +496,7 @@
processor = null;
linkListener = null;
deviceListener = null;
+ groupHandlerMap.forEach((k, v) -> v.shutdown());
groupHandlerMap.clear();
dsNextObjStore.destroy();
diff --git a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
index 45ed92d..d0dbd5f 100644
--- a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
+++ b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
@@ -93,12 +93,12 @@
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
import java.util.Set;
+import static java.util.concurrent.Executors.newScheduledThreadPool;
import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
import static org.onlab.util.Tools.groupedThreads;
import static org.slf4j.LoggerFactory.getLogger;
@@ -175,9 +175,8 @@
private int probeInitDelayMs = 1000;
- protected ExecutorService eventHandler;
-
- private int probeDelayMs = 1000;
+ ExecutorService eventHandler;
+ private ScheduledExecutorService hostProber;
/**
* Creates an OpenFlow host provider.
@@ -190,8 +189,8 @@
public void activate(ComponentContext context) {
cfgService.registerProperties(getClass());
appId = coreService.registerApplication("org.onosproject.provider.host");
- eventHandler = newSingleThreadScheduledExecutor(
- groupedThreads("onos/host-loc-provider", "event-handler", log));
+ eventHandler = newSingleThreadScheduledExecutor(groupedThreads("onos/host-loc-provider", "event-handler", log));
+ hostProber = newScheduledThreadPool(32, groupedThreads("onos/host-loc-probe", "%d", log));
providerService = providerRegistry.register(this);
packetService.addProcessor(processor, PacketProcessor.advisor(1));
deviceService.addListener(deviceListener);
@@ -211,6 +210,7 @@
packetService.removeProcessor(processor);
deviceService.removeListener(deviceListener);
eventHandler.shutdown();
+ hostProber.shutdown();
providerService = null;
log.info("Stopped");
}
@@ -370,8 +370,7 @@
}
// NOTE: delay the probe a little bit to wait for the store synchronization is done
- ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
- executorService.schedule(() ->
+ hostProber.schedule(() ->
sendLocationProbe(probe, connectPoint), probeInitDelayMs, TimeUnit.MILLISECONDS);
});
}