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/SessionManager.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/SessionManager.cpp')
-rw-r--r-- | cpp/src/qpid/console/SessionManager.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/cpp/src/qpid/console/SessionManager.cpp b/cpp/src/qpid/console/SessionManager.cpp index feccf92b01..6cba0933e2 100644 --- a/cpp/src/qpid/console/SessionManager.cpp +++ b/cpp/src/qpid/console/SessionManager.cpp @@ -41,6 +41,13 @@ SessionManager::SessionManager(ConsoleListener* _listener, Settings _settings) : bindingKeys(); } +SessionManager::~SessionManager() +{ + for (vector<Broker*>::iterator iter = brokers.begin(); + iter != brokers.end(); iter++) + delete *iter; +} + Broker* SessionManager::addBroker(client::ConnectionSettings& settings) { Broker* broker(new Broker(*this, settings)); @@ -58,6 +65,7 @@ void SessionManager::delBroker(Broker* broker) iter != brokers.end(); iter++) if (*iter == broker) { brokers.erase(iter); + delete broker; return; } } @@ -171,6 +179,11 @@ void SessionManager::getObjects(Object::Vector& objects, const std::string& clas syncSequenceList.clear(); error = string(); + if (agentList.empty()) { + objects = getResult; + return; + } + for (Agent::Vector::iterator iter = agentList.begin(); iter != agentList.end(); iter++) { Agent* agent = *iter; char rawbuffer[512]; @@ -191,8 +204,12 @@ void SessionManager::getObjects(Object::Vector& objects, const std::string& clas { Mutex::ScopedLock _lock(lock); + sys::AbsTime startTime = sys::now(); while (!syncSequenceList.empty() && error.empty()) { cv.wait(lock, AbsTime(now(), settings.getTimeout * TIME_SEC)); + sys::AbsTime currTime = sys::now(); + if (sys::Duration(startTime, currTime) > settings.getTimeout * TIME_SEC) + break; } } @@ -221,7 +238,8 @@ void SessionManager::allBrokersStable() Mutex::ScopedLock l(brokerListLock); for (vector<Broker*>::iterator iter = brokers.begin(); iter != brokers.end(); iter++) - (*iter)->waitForStable(); + if ((*iter)->isConnected()) + (*iter)->waitForStable(); } void SessionManager::startProtocol(Broker* broker) |