summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2010-07-09 16:06:44 +0000
committerGordon Sim <gsim@apache.org>2010-07-09 16:06:44 +0000
commit4d7e453d2c0da611554ad263186c22c374c090c8 (patch)
treea7319db11487cf0d3cf50df7e0874da1cdcbac1c /qpid/cpp/src
parent1807e9d06bc25bce8aaeb7ab4a2796104ef7d84d (diff)
downloadqpid-python-4d7e453d2c0da611554ad263186c22c374c090c8.tar.gz
QPID-2727: Handle exceptions in Broker constructor and call finalise to safely cleanup plugins
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@962586 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/broker/Broker.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/qpid/cpp/src/qpid/broker/Broker.cpp b/qpid/cpp/src/qpid/broker/Broker.cpp
index 4c2bd9c5bf..db3767bb59 100644
--- a/qpid/cpp/src/qpid/broker/Broker.cpp
+++ b/qpid/cpp/src/qpid/broker/Broker.cpp
@@ -165,6 +165,7 @@ Broker::Broker(const Broker::Options& conf) :
getKnownBrokers(boost::bind(&Broker::getKnownBrokersImpl, this)),
deferDelivery(boost::bind(&Broker::deferDeliveryImpl, this, _1, _2))
{
+ try {
if (conf.enableMgmt) {
QPID_LOG(info, "Management enabled");
managementAgent->configure(dataDir.isEnabled() ? dataDir.getPath() : string(),
@@ -289,6 +290,10 @@ Broker::Broker(const Broker::Options& conf) :
} else if (conf.knownHosts != knownHostsNone) {
knownBrokers.push_back(Url(conf.knownHosts));
}
+ } catch (const std::exception& e) {
+ finalize();
+ throw;
+ }
}
void Broker::declareStandardExchange(const std::string& name, const std::string& type)