diff options
| author | Ted Ross <tross@apache.org> | 2009-10-20 20:38:11 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2009-10-20 20:38:11 +0000 |
| commit | 8645f9099e7da2267f2eb0c94cd2e419db815435 (patch) | |
| tree | a99c2783626ba9317b003cb3f84a07892c8788c5 /cpp/src/qpid/broker/Broker.cpp | |
| parent | db18d33d3bca740454c3c9e6c5e62f8bcc1e70d4 (diff) | |
| download | qpid-python-8645f9099e7da2267f2eb0c94cd2e419db815435.tar.gz | |
Fixed memory leak on broker shutdown. Broker's management agent pointer is now
a std::auto_ptr rather than a raw pointer. The agent pointer was moved in front
of the registries in initialization order to prevent references to deleted management
objects when the registries are destroyed.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@827783 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Broker.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Broker.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/cpp/src/qpid/broker/Broker.cpp b/cpp/src/qpid/broker/Broker.cpp index f758f90a8b..d86f4f8223 100644 --- a/cpp/src/qpid/broker/Broker.cpp +++ b/cpp/src/qpid/broker/Broker.cpp @@ -140,6 +140,7 @@ Broker::Broker(const Broker::Options& conf) : store(0), acl(0), dataDir(conf.noDataDir ? std::string() : conf.dataDir), + managementAgent(conf.enableMgmt ? new ManagementAgent() : 0), queues(this), exchanges(this), links(this), @@ -150,7 +151,6 @@ Broker::Broker(const Broker::Options& conf) : conf.replayFlushLimit*1024, // convert kb to bytes. conf.replayHardLimit*1024), *this), - managementAgent(conf.enableMgmt ? new ManagementAgent() : 0), queueCleaner(queues, timer), queueEvents(poller,!conf.asyncQueueEvents), recovery(true), @@ -161,12 +161,12 @@ Broker::Broker(const Broker::Options& conf) : QPID_LOG(info, "Management enabled"); managementAgent->configure(dataDir.isEnabled() ? dataDir.getPath() : string(), conf.mgmtPubInterval, this, conf.workerThreads + 3); - _qmf::Package packageInitializer(managementAgent); + _qmf::Package packageInitializer(managementAgent.get()); System* system = new System (dataDir.isEnabled() ? dataDir.getPath() : string(), this); systemObject = System::shared_ptr(system); - mgmtObject = new _qmf::Broker(managementAgent, this, system, conf.port); + mgmtObject = new _qmf::Broker(managementAgent.get(), this, system, conf.port); mgmtObject->set_workerThreads(conf.workerThreads); mgmtObject->set_maxConns(conf.maxConnections); mgmtObject->set_connBacklog(conf.connectionBacklog); @@ -242,7 +242,7 @@ Broker::Broker(const Broker::Options& conf) : Exchange::shared_ptr mExchange = exchanges.get (qpid_management); Exchange::shared_ptr dExchange = exchanges.get (amq_direct); managementAgent->setExchange(mExchange, dExchange); - boost::dynamic_pointer_cast<ManagementExchange>(mExchange)->setManagmentAgent(managementAgent); + boost::dynamic_pointer_cast<ManagementExchange>(mExchange)->setManagmentAgent(managementAgent.get()); } else QPID_LOG(info, "Management not enabled"); |
