diff options
author | Ted Ross <tross@apache.org> | 2009-10-22 12:53:10 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2009-10-22 12:53:10 +0000 |
commit | 104e2ee164f8f31230e42e9fdfd5c2f98de31222 (patch) | |
tree | 6421985dd0e1f08079656c0f0d297aa3f26c183c /cpp/src | |
parent | d12750e4646c2ff79e8fd4d37821ccce25582d95 (diff) | |
download | qpid-python-104e2ee164f8f31230e42e9fdfd5c2f98de31222.tar.gz |
QPID-1732 - When an exchange is deleted, the binding-count for bound queues is not adjusted for deleted bindings.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@828674 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/broker/DirectExchange.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/Exchange.cpp | 7 | ||||
-rw-r--r-- | cpp/src/qpid/broker/FanOutExchange.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/HeadersExchange.cpp | 2 | ||||
-rw-r--r-- | cpp/src/qpid/broker/TopicExchange.cpp | 2 |
5 files changed, 6 insertions, 9 deletions
diff --git a/cpp/src/qpid/broker/DirectExchange.cpp b/cpp/src/qpid/broker/DirectExchange.cpp index 29fe47beac..094f59cdec 100644 --- a/cpp/src/qpid/broker/DirectExchange.cpp +++ b/cpp/src/qpid/broker/DirectExchange.cpp @@ -80,7 +80,6 @@ bool DirectExchange::bind(Queue::shared_ptr queue, const string& routingKey, con propagate = bk.fedBinding.addOrigin(fedOrigin); if (mgmtExchange != 0) { mgmtExchange->inc_bindingCount(); - ((_qmf::Queue*) queue->GetManagementObject())->inc_bindingCount(); } } else { return false; @@ -130,7 +129,6 @@ bool DirectExchange::unbind(Queue::shared_ptr queue, const string& routingKey, c propagate = bk.fedBinding.delOrigin(); if (mgmtExchange != 0) { mgmtExchange->dec_bindingCount(); - ((_qmf::Queue*) queue->GetManagementObject())->dec_bindingCount(); } } else { return false; diff --git a/cpp/src/qpid/broker/Exchange.cpp b/cpp/src/qpid/broker/Exchange.cpp index 757127eef2..9468ba0b62 100644 --- a/cpp/src/qpid/broker/Exchange.cpp +++ b/cpp/src/qpid/broker/Exchange.cpp @@ -306,6 +306,7 @@ Exchange::Binding::Binding(const string& _key, Queue::shared_ptr _queue, Exchang if (!origin.empty()) mgmtBinding->set_origin(origin); agent->addObject (mgmtBinding, agent->allocateId(this)); + static_cast<_qmf::Queue*>(mo)->inc_bindingCount(); } } } @@ -314,8 +315,12 @@ Exchange::Binding::Binding(const string& _key, Queue::shared_ptr _queue, Exchang Exchange::Binding::~Binding () { - if (mgmtBinding != 0) + if (mgmtBinding != 0) { + ManagementObject* mo = queue->GetManagementObject(); + if (mo != 0) + static_cast<_qmf::Queue*>(mo)->dec_bindingCount(); mgmtBinding->resourceDestroy (); + } } ManagementObject* Exchange::Binding::GetManagementObject () const diff --git a/cpp/src/qpid/broker/FanOutExchange.cpp b/cpp/src/qpid/broker/FanOutExchange.cpp index b7d46a33fe..6d840b50df 100644 --- a/cpp/src/qpid/broker/FanOutExchange.cpp +++ b/cpp/src/qpid/broker/FanOutExchange.cpp @@ -66,7 +66,6 @@ bool FanOutExchange::bind(Queue::shared_ptr queue, const string& /*key*/, const propagate = fedBinding.addOrigin(fedOrigin); if (mgmtExchange != 0) { mgmtExchange->inc_bindingCount(); - ((_qmf::Queue*) queue->GetManagementObject())->inc_bindingCount(); } } else { return false; @@ -95,7 +94,6 @@ bool FanOutExchange::unbind(Queue::shared_ptr queue, const string& /*key*/, cons propagate = fedBinding.delOrigin(); if (mgmtExchange != 0) { mgmtExchange->dec_bindingCount(); - ((_qmf::Queue*) queue->GetManagementObject())->dec_bindingCount(); } } else { return false; diff --git a/cpp/src/qpid/broker/HeadersExchange.cpp b/cpp/src/qpid/broker/HeadersExchange.cpp index a7c90156e1..38cc0e4050 100644 --- a/cpp/src/qpid/broker/HeadersExchange.cpp +++ b/cpp/src/qpid/broker/HeadersExchange.cpp @@ -82,7 +82,6 @@ bool HeadersExchange::bind(Queue::shared_ptr queue, const string& bindingKey, co if (bindings.add_unless(binding, MatchArgs(queue, args))) { if (mgmtExchange != 0) { mgmtExchange->inc_bindingCount(); - ((_qmf::Queue*) queue->GetManagementObject())->inc_bindingCount(); } routeIVE(); return true; @@ -95,7 +94,6 @@ bool HeadersExchange::unbind(Queue::shared_ptr queue, const string& bindingKey, if (bindings.remove_if(MatchKey(queue, bindingKey))) { if (mgmtExchange != 0) { mgmtExchange->dec_bindingCount(); - ((_qmf::Queue*) queue->GetManagementObject())->dec_bindingCount(); } return true; } else { diff --git a/cpp/src/qpid/broker/TopicExchange.cpp b/cpp/src/qpid/broker/TopicExchange.cpp index cb04742677..dd57549b5d 100644 --- a/cpp/src/qpid/broker/TopicExchange.cpp +++ b/cpp/src/qpid/broker/TopicExchange.cpp @@ -212,7 +212,6 @@ bool TopicExchange::bind(Queue::shared_ptr queue, const string& routingKey, cons propagate = bk.fedBinding.addOrigin(fedOrigin); if (mgmtExchange != 0) { mgmtExchange->inc_bindingCount(); - ((_qmf::Queue*) queue->GetManagementObject())->inc_bindingCount(); } } } else if (fedOp == fedOpUnbind) { @@ -273,7 +272,6 @@ bool TopicExchange::unbind(Queue::shared_ptr queue, const string& constRoutingKe if(qv.empty()) bindings.erase(bi); if (mgmtExchange != 0) { mgmtExchange->dec_bindingCount(); - ((_qmf::Queue*) queue->GetManagementObject())->dec_bindingCount(); } if (propagate) |