diff options
author | Alan Conway <aconway@apache.org> | 2007-03-29 22:30:48 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-03-29 22:30:48 +0000 |
commit | 1a23d52070195a9c8de98dd4af6e19f42051f1a5 (patch) | |
tree | a7515a61e0a46defc4ef84bea52424c38bdbba0c /cpp/lib/broker/FanOutExchange.cpp | |
parent | 45d083f70618d21ae9d138cf0c3d8e44c84f4f93 (diff) | |
download | qpid-python-1a23d52070195a9c8de98dd4af6e19f42051f1a5.tar.gz |
Fixed memory leak: removed Binding and ExchangeBinding.
These classes unbind a deleted queue from any Exchanges.
But Exchanges hold shared_ptr<Queue>, so queues never deleted while
the exchange exists. Moreover queue-binding form a shared_ptr cycle
causing a leak.
Raised QPID-438 for the remaining problem: destroyed queues are never
unbound or deleted
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@523857 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/lib/broker/FanOutExchange.cpp')
-rw-r--r-- | cpp/lib/broker/FanOutExchange.cpp | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/cpp/lib/broker/FanOutExchange.cpp b/cpp/lib/broker/FanOutExchange.cpp index 48afcc20d5..b487593efd 100644 --- a/cpp/lib/broker/FanOutExchange.cpp +++ b/cpp/lib/broker/FanOutExchange.cpp @@ -19,7 +19,6 @@ * */ #include <FanOutExchange.h> -#include <ExchangeBinding.h> #include <algorithm> using namespace qpid::broker; @@ -28,13 +27,12 @@ using namespace qpid::sys; FanOutExchange::FanOutExchange(const std::string& _name) : Exchange(_name) {} -void FanOutExchange::bind(Queue::shared_ptr queue, const string& routingKey, const FieldTable* args){ +void FanOutExchange::bind(Queue::shared_ptr queue, const string& /*routingKey*/, const FieldTable* /*args*/){ Mutex::ScopedLock locker(lock); // Add if not already present. Queue::vector::iterator i = std::find(bindings.begin(), bindings.end(), queue); if (i == bindings.end()) { bindings.push_back(queue); - queue->bound(new ExchangeBinding(this, queue, routingKey, args)); } } @@ -43,8 +41,6 @@ void FanOutExchange::unbind(Queue::shared_ptr queue, const string& /*routingKey* Queue::vector::iterator i = std::find(bindings.begin(), bindings.end(), queue); if (i != bindings.end()) { bindings.erase(i); - // TODO aconway 2006-09-14: What about the ExchangeBinding object? - // Don't we have to verify routingKey/args match? } } |