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<>(); } } }