diff options
| author | Gordon Sim <gsim@apache.org> | 2013-11-12 13:42:36 +0000 |
|---|---|---|
| committer | Gordon Sim <gsim@apache.org> | 2013-11-12 13:42:36 +0000 |
| commit | 5f3ff3bcc03691d0646cd75d8408be284d8adee6 (patch) | |
| tree | d475768bd96b23ac17771b1b9d8617b2790d83e5 /cpp/src/qpid/xml/XmlExchange.cpp | |
| parent | 3741945c58f6b835003bbdb978efa34ff6a681b5 (diff) | |
| download | qpid-python-5f3ff3bcc03691d0646cd75d8408be284d8adee6.tar.gz | |
QPID-5301: support autodeleted exchanges
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1541058 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/xml/XmlExchange.cpp')
| -rw-r--r-- | cpp/src/qpid/xml/XmlExchange.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/cpp/src/qpid/xml/XmlExchange.cpp b/cpp/src/qpid/xml/XmlExchange.cpp index 3802ec5f7f..837693f53f 100644 --- a/cpp/src/qpid/xml/XmlExchange.cpp +++ b/cpp/src/qpid/xml/XmlExchange.cpp @@ -109,9 +109,9 @@ XmlExchange::XmlExchange(const std::string& _name, Manageable* _parent, Broker* mgmtExchange->set_type (typeName); } -XmlExchange::XmlExchange(const std::string& _name, bool _durable, +XmlExchange::XmlExchange(const std::string& _name, bool _durable, bool autodelete, const FieldTable& _args, Manageable* _parent, Broker* b) : - Exchange(_name, _durable, _args, _parent, b) + Exchange(_name, _durable, autodelete, _args, _parent, b) { if (mgmtExchange != 0) mgmtExchange->set_type (typeName); @@ -201,9 +201,11 @@ bool XmlExchange::unbindLH(Queue::shared_ptr queue, const std::string& bindingKe if (mgmtExchange != 0) { mgmtExchange->dec_bindingCount(); } + if (bindingsMap[bindingKey].empty()) bindingsMap.erase(bindingKey); + if (bindingsMap.empty()) checkAutodelete(); return true; } else { - return false; + return false; } } @@ -443,6 +445,11 @@ bool XmlExchange::MatchQueueAndOrigin::operator()(XmlBinding::shared_ptr b) const std::string XmlExchange::typeName("xml"); - + +bool XmlExchange::hasBindings() +{ + RWlock::ScopedRlock l(lock); + return !bindingsMap.empty(); +} } } |
