This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 748848158e0523bb229ce0854c71a059023091b6
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Feb 12 10:25:43 2020 +0100

    camel-core - Fix concurrency issue with error handlers when using multicast 
based EIPs. And yeah child service support can use a plain array as it was not 
the concurrency problem after all.
---
 .../main/java/org/apache/camel/impl/engine/DefaultRouteContext.java  | 5 ++++-
 .../src/main/java/org/apache/camel/support/ChildServiceSupport.java  | 4 ++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git 
a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
 
b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
index afc8e95..7a5a248 100644
--- 
a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
+++ 
b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteContext.java
@@ -22,6 +22,8 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -78,7 +80,8 @@ public class DefaultRouteContext implements RouteContext {
     private final Map<String, Object> properties = new HashMap<>();
     private ErrorHandlerFactory errorHandlerFactory;
     private Integer startupOrder;
-    private Map<ErrorHandlerFactory, Set<NamedNode>> errorHandlers = new 
HashMap<>();
+    // must be concurrent as error handlers can be mutated concurrently via 
multicast/recipientlist EIPs
+    private ConcurrentMap<ErrorHandlerFactory, Set<NamedNode>> errorHandlers = 
new ConcurrentHashMap<>();
 
     public DefaultRouteContext(CamelContext camelContext, NamedNode route, 
String routeId) {
         this.camelContext = camelContext;
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/ChildServiceSupport.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/ChildServiceSupport.java
index bf1a820..c3bbb30 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/ChildServiceSupport.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/ChildServiceSupport.java
@@ -16,8 +16,8 @@
  */
 package org.apache.camel.support;
 
+import java.util.ArrayList;
 import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Service;
@@ -127,7 +127,7 @@ public abstract class ChildServiceSupport extends 
ServiceSupport {
             if (childServices == null) {
                 synchronized (lock) {
                     if (childServices == null) {
-                        childServices = new CopyOnWriteArrayList<>();
+                        childServices = new ArrayList<>();
                     }
                 }
             }

Reply via email to