summaryrefslogtreecommitdiff
path: root/qpid/cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2010-05-17 21:28:15 +0000
committerAlan Conway <aconway@apache.org>2010-05-17 21:28:15 +0000
commite301e74fc9c7e8944adf046f6bcc7f5408d6081b (patch)
tree49ef6104298a8b68cdb6f9aa80e9cf865cd7fca8 /qpid/cpp
parent7eed34e78bb870f86816c7fc75849f501e1bcc52 (diff)
downloadqpid-python-e301e74fc9c7e8944adf046f6bcc7f5408d6081b.tar.gz
Fix retry logic in ConnectionImpl::newSession.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@945387 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp')
-rw-r--r--qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
index 777a952bae..58f4f2acfb 100644
--- a/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
+++ b/qpid/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
@@ -205,14 +205,15 @@ qpid::messaging::Session ConnectionImpl::newSession(bool transactional, const st
{
std::string name = n.empty() ? Uuid(true).str() : n;
qpid::messaging::Session impl(new SessionImpl(*this, transactional));
- {
- qpid::sys::Mutex::ScopedLock l(lock);
- sessions[name] = impl;
- }
- try {
- getImplPtr(impl)->setSession(connection.newSession(name));
- } catch (const qpid::TransportFailure&) {
- open();
+ while (true) {
+ try {
+ getImplPtr(impl)->setSession(connection.newSession(name));
+ qpid::sys::Mutex::ScopedLock l(lock);
+ sessions[name] = impl;
+ break;
+ } catch (const qpid::TransportFailure&) {
+ open();
+ }
}
return impl;
}