diff options
author | Ted Ross <tross@apache.org> | 2009-06-08 20:23:19 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2009-06-08 20:23:19 +0000 |
commit | 87d3337eefa96eceeb0247039b0738352ef91130 (patch) | |
tree | 6fce254c404993e0f2d651b58830f31b238907b7 /cpp/src/qpid/console/Broker.cpp | |
parent | 5fe7eb38df0c0e205e9663ac6056aeef2ac0bc8b (diff) | |
download | qpid-python-87d3337eefa96eceeb0247039b0738352ef91130.tar.gz |
Bugfixes in the c++ console API:
- Connection threads now shut down cleanly
- get-query timeouts now work properly
- waitForStable now only waits for connected brokers
The ping example was improved. It now more cleanly handles connection loss/reconnect.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@782766 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/console/Broker.cpp')
-rw-r--r-- | cpp/src/qpid/console/Broker.cpp | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/cpp/src/qpid/console/Broker.cpp b/cpp/src/qpid/console/Broker.cpp index 789b90eaaf..4f90afd39a 100644 --- a/cpp/src/qpid/console/Broker.cpp +++ b/cpp/src/qpid/console/Broker.cpp @@ -57,6 +57,8 @@ Broker::Broker(SessionManager& sm, ConnectionSettings& settings) : Broker::~Broker() { + connThreadBody.shutdown(); + connThread.join(); } string Broker::getUrl() const @@ -184,6 +186,8 @@ void Broker::ConnectionThread::run() subscriptions->setFlowControl(dest, FlowControl::unlimited()); { Mutex::ScopedLock _lock(connLock); + if (shuttingDown) + return; operational = true; broker.resetAgents(); broker.connected = true; @@ -199,16 +203,26 @@ void Broker::ConnectionThread::run() broker.sessionManager.handleBrokerDisconnect(&broker); } delay = delayMin; + connection.close(); delete subscriptions; subscriptions = 0; - session.close(); } catch (std::exception &e) { QPID_LOG(debug, " outer exception: " << e.what()); if (delay < delayMax) delay *= delayFactor; } - ::sleep(delay); + { + Mutex::ScopedLock _lock(connLock); + if (shuttingDown) + return; + { + Mutex::ScopedUnlock _unlock(connLock); + ::sleep(delay); + } + if (shuttingDown) + return; + } } } @@ -253,6 +267,16 @@ void Broker::ConnectionThread::bindExchange(const std::string& exchange, const s arg::bindingKey=key); } +void Broker::ConnectionThread::shutdown() +{ + { + Mutex::ScopedLock _lock(connLock); + shuttingDown = true; + } + if (subscriptions) + subscriptions->stop(); +} + void Broker::waitForStable() { Mutex::ScopedLock l(lock); |