You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2009/09/29 10:34:49 UTC

svn commit: r819860 - /camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java

Author: davsclaus
Date: Tue Sep 29 08:34:48 2009
New Revision: 819860

URL: http://svn.apache.org/viewvc?rev=819860&view=rev
Log:
CAMEL-1912: Fixed removeEndpoints failing due to concurernt modification exception

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=819860&r1=819859&r2=819860&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java Tue Sep 29 08:34:48 2009
@@ -350,17 +350,24 @@
                     strategy.onEndpointRemove(oldEndpoint);
                 }
             } else {
+                Collection<Map.Entry> worklist = new ArrayList<Map.Entry>();
                 for (Map.Entry entry : endpoints.entrySet()) {
                     oldEndpoint = (Endpoint) entry.getValue();
                     if (!oldEndpoint.isSingleton() && uri.equals(oldEndpoint.getEndpointUri())) {
-                        answer.add(oldEndpoint);
-                        stopServices(oldEndpoint);
-                        endpoints.remove(entry.getKey());
-                        for (LifecycleStrategy strategy : lifecycleStrategies) {
-                            strategy.onEndpointRemove(oldEndpoint);
-                        }
+                        // add to worklist to avoid concurrent modification exception
+                        worklist.add(entry);
+                    }
+                }
+                for (Map.Entry entry : worklist) {
+                    oldEndpoint = (Endpoint) entry.getValue();
+                    answer.add(oldEndpoint);
+                    stopServices(oldEndpoint);
+                    endpoints.remove(entry.getKey());
+                    for (LifecycleStrategy strategy : lifecycleStrategies) {
+                        strategy.onEndpointRemove(oldEndpoint);
                     }
                 }
+
             }
         }
         return answer;