Jonathan Hart
Committed by Gerrit Code Review

Use thread safe sets for listeners in OpenFlowControllerImpl

Change-Id: Ieaae89cad1d65c70afad8cde12b17282d7fe357e
...@@ -18,7 +18,6 @@ package org.onosproject.openflow.controller.impl; ...@@ -18,7 +18,6 @@ package org.onosproject.openflow.controller.impl;
18 import com.google.common.collect.ArrayListMultimap; 18 import com.google.common.collect.ArrayListMultimap;
19 import com.google.common.collect.Lists; 19 import com.google.common.collect.Lists;
20 import com.google.common.collect.Multimap; 20 import com.google.common.collect.Multimap;
21 -import com.google.common.collect.Sets;
22 import org.apache.felix.scr.annotations.Activate; 21 import org.apache.felix.scr.annotations.Activate;
23 import org.apache.felix.scr.annotations.Component; 22 import org.apache.felix.scr.annotations.Component;
24 import org.apache.felix.scr.annotations.Deactivate; 23 import org.apache.felix.scr.annotations.Deactivate;
...@@ -61,10 +60,10 @@ import org.slf4j.LoggerFactory; ...@@ -61,10 +60,10 @@ import org.slf4j.LoggerFactory;
61 import java.util.Collection; 60 import java.util.Collection;
62 import java.util.Dictionary; 61 import java.util.Dictionary;
63 import java.util.HashMap; 62 import java.util.HashMap;
64 -import java.util.HashSet;
65 import java.util.Map; 63 import java.util.Map;
66 import java.util.Set; 64 import java.util.Set;
67 import java.util.concurrent.ConcurrentHashMap; 65 import java.util.concurrent.ConcurrentHashMap;
66 +import java.util.concurrent.CopyOnWriteArraySet;
68 import java.util.concurrent.ExecutorService; 67 import java.util.concurrent.ExecutorService;
69 import java.util.concurrent.Executors; 68 import java.util.concurrent.Executors;
70 import java.util.concurrent.locks.Lock; 69 import java.util.concurrent.locks.Lock;
...@@ -89,19 +88,19 @@ public class OpenFlowControllerImpl implements OpenFlowController { ...@@ -89,19 +88,19 @@ public class OpenFlowControllerImpl implements OpenFlowController {
89 Executors.newFixedThreadPool(4, groupedThreads("onos/of", "event-barrier-%d")); 88 Executors.newFixedThreadPool(4, groupedThreads("onos/of", "event-barrier-%d"));
90 89
91 protected ConcurrentHashMap<Dpid, OpenFlowSwitch> connectedSwitches = 90 protected ConcurrentHashMap<Dpid, OpenFlowSwitch> connectedSwitches =
92 - new ConcurrentHashMap<Dpid, OpenFlowSwitch>(); 91 + new ConcurrentHashMap<>();
93 protected ConcurrentHashMap<Dpid, OpenFlowSwitch> activeMasterSwitches = 92 protected ConcurrentHashMap<Dpid, OpenFlowSwitch> activeMasterSwitches =
94 - new ConcurrentHashMap<Dpid, OpenFlowSwitch>(); 93 + new ConcurrentHashMap<>();
95 protected ConcurrentHashMap<Dpid, OpenFlowSwitch> activeEqualSwitches = 94 protected ConcurrentHashMap<Dpid, OpenFlowSwitch> activeEqualSwitches =
96 - new ConcurrentHashMap<Dpid, OpenFlowSwitch>(); 95 + new ConcurrentHashMap<>();
97 96
98 protected OpenFlowSwitchAgent agent = new OpenFlowSwitchAgent(); 97 protected OpenFlowSwitchAgent agent = new OpenFlowSwitchAgent();
99 - protected Set<OpenFlowSwitchListener> ofSwitchListener = new HashSet<>(); 98 + protected Set<OpenFlowSwitchListener> ofSwitchListener = new CopyOnWriteArraySet<>();
100 99
101 protected Multimap<Integer, PacketListener> ofPacketListener = 100 protected Multimap<Integer, PacketListener> ofPacketListener =
102 ArrayListMultimap.create(); 101 ArrayListMultimap.create();
103 102
104 - protected Set<OpenFlowEventListener> ofEventListener = Sets.newHashSet(); 103 + protected Set<OpenFlowEventListener> ofEventListener = new CopyOnWriteArraySet<>();
105 104
106 protected Multimap<Dpid, OFFlowStatsEntry> fullFlowStats = 105 protected Multimap<Dpid, OFFlowStatsEntry> fullFlowStats =
107 ArrayListMultimap.create(); 106 ArrayListMultimap.create();
......