Guards iteration against concurrent modification
[controller.git] / opendaylight / md-sal / sal-dom-broker / src / main / java / org / opendaylight / controller / sal / dom / broker / BrokerImpl.java
index 6cd0ebc5f838dbded2f16dac6fd5dc9eeee748a7..7998bdecdd1847f6e86bdf28c5a40efda80b6112 100644 (file)
@@ -38,7 +38,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class BrokerImpl implements Broker, DOMRpcProviderService, DOMRpcService, AutoCloseable {
-    private final static Logger log = LoggerFactory.getLogger(BrokerImpl.class);
+    private static final Logger LOG = LoggerFactory.getLogger(BrokerImpl.class);
 
     // Broker Generic Context
     private final Set<ConsumerContextImpl> sessions = Collections
@@ -79,9 +79,11 @@ public class BrokerImpl implements Broker, DOMRpcProviderService, DOMRpcService,
     // Validation
     private void checkPredicates(final Provider prov) {
         Preconditions.checkNotNull(prov, "Provider should not be null.");
-        for (final ProviderContextImpl session : providerSessions) {
-            if (prov.equals(session.getProvider())) {
-                throw new IllegalStateException("Provider already registered");
+        synchronized (providerSessions) {
+            for (final ProviderContextImpl session : providerSessions) {
+                if (prov.equals(session.getProvider())) {
+                    throw new IllegalStateException("Provider already registered");
+                }
             }
         }
 
@@ -89,9 +91,11 @@ public class BrokerImpl implements Broker, DOMRpcProviderService, DOMRpcService,
 
     private void checkPredicates(final Consumer cons) {
         Preconditions.checkNotNull(cons, "Consumer should not be null.");
-        for (final ConsumerContextImpl session : sessions) {
-            if (cons.equals(session.getConsumer())) {
-                throw new IllegalStateException("Consumer already registered");
+        synchronized (sessions) {
+            for (final ConsumerContextImpl session : sessions) {
+                if (cons.equals(session.getConsumer())) {
+                    throw new IllegalStateException("Consumer already registered");
+                }
             }
         }
     }
@@ -144,7 +148,7 @@ public class BrokerImpl implements Broker, DOMRpcProviderService, DOMRpcService,
     @Override
     public ConsumerSession registerConsumer(final Consumer consumer) {
         checkPredicates(consumer);
-        log.trace("Registering consumer {}", consumer);
+        LOG.trace("Registering consumer {}", consumer);
         final ConsumerContextImpl session = newSessionFor(consumer);
         consumer.onSessionInitiated(session);
         sessions.add(session);