From 7fba002cd5acb236c7417a44ed7ef330eba84529 Mon Sep 17 00:00:00 2001 From: Robert Godfrey Date: Sun, 12 Apr 2015 15:09:38 +0000 Subject: QPID-5818 : [Java Broker] creating children from within the configuration thread leads to deadlock as the configuration thread blocks waiting for a task which cannot be executed because it needs the config thread. Instead use asynchronous child creation. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1673017 13f79535-47bb-0310-9956-ffa450edef68 --- .../virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java | 8 +++++--- .../virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'qpid/java/bdbstore/src') diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java index b1444d0f17..f68532b1d8 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java @@ -27,6 +27,8 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.ScheduledFuture; +import com.google.common.util.concurrent.ListenableFuture; + import org.apache.qpid.server.connection.IConnectionRegistry; import org.apache.qpid.server.exchange.ExchangeImpl; import org.apache.qpid.server.logging.EventLogger; @@ -121,9 +123,9 @@ public class BDBHAReplicaVirtualHostImpl extends AbstractConfiguredObject C addChild(final Class childClass, - final Map attributes, - final ConfiguredObject... otherParents) + protected ListenableFuture addChildAsync(final Class childClass, + final Map attributes, + final ConfiguredObject... otherParents) { throwUnsupportedForReplica(); return null; diff --git a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java index 20c59ddf6a..9b5aef5405 100644 --- a/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java +++ b/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhostnode/berkeleydb/BDBHAVirtualHostNodeImpl.java @@ -276,14 +276,14 @@ public class BDBHAVirtualHostNodeImpl extends AbstractVirtualHostNode C addChild(Class childClass, Map attributes, + protected ListenableFuture addChildAsync(Class childClass, Map attributes, ConfiguredObject... otherParents) { if(childClass == VirtualHost.class) { - return (C) getObjectFactory().create(VirtualHost.class, attributes, this); + return getObjectFactory().createAsync(childClass, attributes, this); } - return super.addChild(childClass, attributes, otherParents); + return super.addChildAsync(childClass, attributes, otherParents); } @Override -- cgit v1.2.1