Fixed issue with leaking various switch-related collectors, e.g. port stats, meters, table stats, flow stats.
Change-Id: If46102708fa88cf5f251a18cb9ce09393fb95752
diff --git a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java
index 24bbb95..952a47f 100644
--- a/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java
+++ b/providers/openflow/meter/src/main/java/org/onosproject/provider/of/meter/impl/OpenFlowMeterProvider.java
@@ -207,7 +207,13 @@
if (isMeterSupported(sw)) {
MeterStatsCollector msc = new MeterStatsCollector(sw, POLL_INTERVAL);
msc.start();
- collectors.put(new Dpid(sw.getId()), msc);
+ stopCollectorIfNeeded(collectors.put(new Dpid(sw.getId()), msc));
+ }
+ }
+
+ private void stopCollectorIfNeeded(MeterStatsCollector collector) {
+ if (collector != null) {
+ collector.stop();
}
}
@@ -370,10 +376,7 @@
@Override
public void switchRemoved(Dpid dpid) {
- MeterStatsCollector msc = collectors.remove(dpid);
- if (msc != null) {
- msc.stop();
- }
+ stopCollectorIfNeeded(collectors.remove(dpid));
}
@Override