summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/console/Broker.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/Broker.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/Broker.cpp')
-rw-r--r--cpp/src/qpid/console/Broker.cpp28
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);