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 c200d74..97a6815 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
@@ -492,6 +492,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 0633d12..3c9f94e 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
@@ -92,12 +92,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;
@@ -174,9 +174,8 @@
private int probeInitDelayMs = 1000;
- protected ExecutorService eventHandler;
-
- private int probeDelayMs = 1000;
+ ExecutorService eventHandler;
+ private ScheduledExecutorService hostProber;
/**
* Creates an OpenFlow host provider.
@@ -189,8 +188,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);
@@ -210,6 +209,7 @@
packetService.removeProcessor(processor);
deviceService.removeListener(deviceListener);
eventHandler.shutdown();
+ hostProber.shutdown();
providerService = null;
log.info("Stopped");
}
@@ -369,8 +369,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);
});
}