summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2009-10-26 20:11:08 +0000
committerAlan Conway <aconway@apache.org>2009-10-26 20:11:08 +0000
commitb6eb88609aea82e676f33ae8ff68918b68b81d33 (patch)
tree7180c10a249f84f635459086ffab7fe93ece3e01 /cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
parentf5c7bf95dd04dc1cf0248511982a18a45847da14 (diff)
downloadqpid-python-b6eb88609aea82e676f33ae8ff68918b68b81d33.tar.gz
Separate FailoverListener from client::Connection.
client::ConnectionImpl used to contain a FailoverListener to subscribe for updates on the amq.failover exchange. This caused some lifecycle issues including memory leaks. Now FailoverListener is a public API class that the user must create associated with a session to get known-broker updates. Removed the weak_ptr logic in client::SessionImpl which was only required because of FailoverListener. Made SessionImpl::close() idempotent. Gets rid of spurious warning messages in some tests. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@829931 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp')
-rw-r--r--cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
index 3a735b5698..1698f96caf 100644
--- a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
+++ b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
@@ -136,7 +136,9 @@ void ConnectionImpl::connect(const AbsTime& started)
bool ConnectionImpl::tryConnect()
{
- if (tryConnect(url) || tryConnect(connection.getKnownBrokers())) {
+ if (tryConnect(url) ||
+ (failoverListener.get() && tryConnect(failoverListener->getKnownBrokers())))
+ {
return resetSessions();
} else {
return false;
@@ -148,6 +150,7 @@ bool ConnectionImpl::tryConnect(const Url& u)
try {
QPID_LOG(info, "Trying to connect to " << url << "...");
connection.open(u, settings);
+ failoverListener.reset(new FailoverListener(connection));
return true;
} catch (const Exception& e) {
//TODO: need to fix timeout on open so that it throws TransportFailure