From 9a6641288dd057ac9545a560893d90f9ea9a3359 Mon Sep 17 00:00:00 2001
From: Gregor Maier <gregor.maier@bigswitch.com>
Date: Fri, 19 Oct 2012 14:39:09 -0700
Subject: [PATCH] Remove unnecessary locks by using volatile and concurrent
 set.

---
 .../floodlightcontroller/core/internal/OFSwitchImpl.java  | 8 +++++---
 .../devicemanager/internal/DeviceManagerImpl.java         | 4 ++--
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
index d0bf49493..f0389a46c 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/OFSwitchImpl.java
@@ -105,7 +105,7 @@ public class OFSwitchImpl implements IOFSwitch {
     protected Map<Integer,OFStatisticsFuture> statsFutureMap;
     protected Map<Integer, IOFMessageListener> iofMsgListenersMap;
     protected Map<Integer,OFFeaturesReplyFuture> featuresFutureMap;
-    protected boolean connected;
+    protected volatile boolean connected;
     protected Role role;
     protected TimedCache<Long> timedCache;
     protected ReentrantReadWriteLock listenerLock;
@@ -493,13 +493,15 @@ public class OFSwitchImpl implements IOFSwitch {
 
     @JsonIgnore
     @Override
-    public synchronized boolean isConnected() {
+    public boolean isConnected() {
+        // No lock needed since we use volatile
         return connected;
     }
 
     @Override
     @JsonIgnore
-    public synchronized void setConnected(boolean connected) {
+    public void setConnected(boolean connected) {
+        // No lock needed since we use volatile
         this.connected = connected;
     }
     
diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
index feccdc4f8..033d0c11e 100755
--- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
+++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java
@@ -663,8 +663,8 @@ IFlowReconcileListener, IInfoProvider, IHAListener {
         addIndex(true, EnumSet.of(DeviceField.IPV4));
 
         this.deviceListeners = new HashSet<IDeviceListener>();
-        this.suppressAPs =
-                Collections.synchronizedSet(new HashSet<SwitchPort>());
+        this.suppressAPs = Collections.newSetFromMap(
+                               new ConcurrentHashMap<SwitchPort, Boolean>());
 
         this.floodlightProvider =
                 fmc.getServiceImpl(IFloodlightProviderService.class);
-- 
GitLab