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/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
index a9f9339..83100f4 100644
--- a/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
+++ b/providers/openflow/group/src/main/java/org/onosproject/provider/of/group/impl/OpenFlowGroupProvider.java
@@ -363,10 +363,7 @@
if (isGroupSupported(sw)) {
GroupStatsCollector gsc = new GroupStatsCollector(sw, POLL_INTERVAL);
gsc.start();
- GroupStatsCollector prevGsc = collectors.put(dpid, gsc);
- if (prevGsc != null) {
- prevGsc.stop();
- }
+ stopCollectorIfNeeded(collectors.put(dpid, gsc));
}
//figure out race condition
@@ -377,7 +374,10 @@
@Override
public void switchRemoved(Dpid dpid) {
- GroupStatsCollector collector = collectors.remove(dpid);
+ stopCollectorIfNeeded(collectors.remove(dpid));
+ }
+
+ private void stopCollectorIfNeeded(GroupStatsCollector collector) {
if (collector != null) {
collector.stop();
}