summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp b/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
index 777a952bae..58f4f2acfb 100644
--- a/cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp
+++ b/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;
}