Author: jstrachan
Date: Thu Aug 24 07:01:30 2006
New Revision: 434397

URL: http://svn.apache.org/viewvc?rev=434397&view=rev
Log:
avoid the possibility that 2 threads could attempt to add a destination at the 
same time causing it to be created twice and avoid issues such as duplicate 
registration in JMX

Modified:
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java

Modified: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java?rev=434397&r1=434396&r2=434397&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
 Thu Aug 24 07:01:30 2006
@@ -77,24 +77,32 @@
     
     public Destination addDestination(ConnectionContext context, 
ActiveMQDestination destination) throws Exception {
         log.debug("Adding destination: "+destination);
-        Destination dest = createDestination(context, destination);
         
-        // intercept if there is a valid interceptor defined
-        DestinationInterceptor destinationInterceptor = 
broker.getDestinationInterceptor();
-        if (destinationInterceptor != null) {
-            dest = destinationInterceptor.intercept(dest);
-        }
-        
-        dest.start();
-        synchronized(destinationsMutex){
-            destinations.put(destination,dest);
-            destinationMap.put(destination,dest);
-            
-            // Add all consumers that are interested in the destination. 
-            for (Iterator iter = subscriptions.values().iterator(); 
iter.hasNext();) {
-                Subscription sub = (Subscription) iter.next();
-                if( sub.matches(destination) ) {
-                    dest.addSubscription(context, sub);
+        synchronized (destinationsMutex) {
+            Destination dest = (Destination) destinations.get(destination);
+            if (dest != null) {
+                log.warn("Attempt to add destination which is already created: 
" + destination);
+            }
+            else {
+                dest = createDestination(context, destination);
+
+                // intercept if there is a valid interceptor defined
+                DestinationInterceptor destinationInterceptor = 
broker.getDestinationInterceptor();
+                if (destinationInterceptor != null) {
+                    dest = destinationInterceptor.intercept(dest);
+                }
+
+                dest.start();
+
+                destinations.put(destination, dest);
+                destinationMap.put(destination, dest);
+
+                // Add all consumers that are interested in the destination.
+                for (Iterator iter = subscriptions.values().iterator(); 
iter.hasNext();) {
+                    Subscription sub = (Subscription) iter.next();
+                    if (sub.matches(destination)) {
+                        dest.addSubscription(context, sub);
+                    }
                 }
             }
             return dest;


Reply via email to