summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/console/SessionManager.cpp
diff options
context:
space:
mode:
authorTed Ross <tross@apache.org>2009-06-08 20:23:19 +0000
committerTed Ross <tross@apache.org>2009-06-08 20:23:19 +0000
commit87d3337eefa96eceeb0247039b0738352ef91130 (patch)
tree6fce254c404993e0f2d651b58830f31b238907b7 /cpp/src/qpid/console/SessionManager.cpp
parent5fe7eb38df0c0e205e9663ac6056aeef2ac0bc8b (diff)
downloadqpid-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.cpp20
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)