Repository: camel Updated Branches: refs/heads/camel-2.13.x f129e2990 -> 62af8b8a9 refs/heads/camel-2.14.x 38e4ded5a -> 34a5ee903
CAMEL-8004: Fixed concurreny dead-lock potential when using getRoutes from CamelContext. Thanks to Babak for researching this. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/34a5ee90 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/34a5ee90 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/34a5ee90 Branch: refs/heads/camel-2.14.x Commit: 34a5ee9034149cf8b7c07853df08985fd3fa92cb Parents: 38e4ded Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Nov 7 14:17:38 2014 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Nov 7 14:42:27 2014 +0100 ---------------------------------------------------------------------- .../apache/camel/impl/DefaultCamelContext.java | 18 ++++++++++++------ .../camel/component/quartz2/QuartzEndpoint.java | 2 +- .../quartz2/QuartzNameCollisionTest.java | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/34a5ee90/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index ffe4b59..ce4ab89 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -653,12 +653,14 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon return routeStartupOrder; } - public synchronized List<Route> getRoutes() { + public List<Route> getRoutes() { // lets return a copy of the collection as objects are removed later when services are stopped if (routes.isEmpty()) { return Collections.emptyList(); } else { - return new ArrayList<Route>(routes); + synchronized (routes) { + return new ArrayList<Route>(routes); + } } } @@ -676,12 +678,16 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon throw new UnsupportedOperationException("Overriding existing routes is not supported yet, use addRouteCollection instead"); } - synchronized void removeRouteCollection(Collection<Route> routes) { - this.routes.removeAll(routes); + void removeRouteCollection(Collection<Route> routes) { + synchronized (routes) { + this.routes.removeAll(routes); + } } - synchronized void addRouteCollection(Collection<Route> routes) throws Exception { - this.routes.addAll(routes); + void addRouteCollection(Collection<Route> routes) throws Exception { + synchronized (routes) { + this.routes.addAll(routes); + } } public void addRoutes(RoutesBuilder builder) throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/34a5ee90/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java b/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java index d2afb08..4dd9e23 100644 --- a/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java +++ b/components/camel-quartz2/src/main/java/org/apache/camel/component/quartz2/QuartzEndpoint.java @@ -269,7 +269,7 @@ public class QuartzEndpoint extends DefaultEndpoint { QuartzEndpoint quartzEndpoint = (QuartzEndpoint) route.getEndpoint(); TriggerKey checkTriggerKey = quartzEndpoint.getTriggerKey(); if (triggerKey.equals(checkTriggerKey)) { - throw new IllegalArgumentException("Trigger key " + triggerKey + " is already in used by " + quartzEndpoint); + throw new IllegalArgumentException("Trigger key " + triggerKey + " is already in use by " + quartzEndpoint); } } } http://git-wip-us.apache.org/repos/asf/camel/blob/34a5ee90/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzNameCollisionTest.java ---------------------------------------------------------------------- diff --git a/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzNameCollisionTest.java b/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzNameCollisionTest.java index 66a620f..7444b2b 100644 --- a/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzNameCollisionTest.java +++ b/components/camel-quartz2/src/test/java/org/apache/camel/component/quartz2/QuartzNameCollisionTest.java @@ -55,7 +55,7 @@ public class QuartzNameCollisionTest { Assert.fail("Should have thrown an exception"); } catch (FailedToCreateRouteException e) { String reason = e.getMessage(); - Assert.assertEquals(reason.indexOf("Trigger key myGroup.myTimerName is already in used") >= 0, true); + Assert.assertEquals(reason.indexOf("Trigger key myGroup.myTimerName is already in use") >= 0, true); } }