From 88fb52f3124f4e6781e2b29d64e3d11ba9fe4af6 Mon Sep 17 00:00:00 2001
From: Rob Adams <rob.adams@bigswitch.com>
Date: Wed, 27 Jun 2012 15:16:26 -0700
Subject: [PATCH] Don't set role again if it's the same.  Partial fix for
 BSC-1835

---
 .../core/internal/Controller.java                   | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
index 5bbe2437f..27e0394b1 100644
--- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java
+++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java
@@ -345,12 +345,14 @@ public class Controller implements IFloodlightProviderService,
     }
 
     @Override
-    public synchronized Role getRole() {
-        return role;
+    public Role getRole() {
+        synchronized(roleChanger) {
+            return role;
+        }
     }
     
     @Override
-    public synchronized void setRole(Role role) {
+    public void setRole(Role role) {
         if (role == null) throw new NullPointerException("Role can not be null.");
         
         // Need to synchronize to ensure a reliable ordering on role request
@@ -359,6 +361,11 @@ public class Controller implements IFloodlightProviderService,
         // timeout handling
         // @see RoleChanger
         synchronized(roleChanger) {
+            if (role.equals(this.role)) {
+                log.debug("Ignoring role change: role is already {}", role);
+                return;
+            }
+
             Role oldRole = this.role;
             this.role = role;
             
-- 
GitLab