diff options
Diffstat (limited to 'cpp')
-rw-r--r-- | cpp/src/qpid/client/amqp0_10/ConnectionImpl.cpp | 17 |
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; } |