summaryrefslogtreecommitdiff
path: root/cpp/src
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
commit499a1cdc238e7ed738dc26aca74b1e47d218d451 (patch)
tree7630f1a67b385e65e9e9f48b6009323828c44984 /cpp/src
parentf3a87cca79dc00d76dc76b5143556b4446c297c0 (diff)
downloadqpid-python-499a1cdc238e7ed738dc26aca74b1e47d218d451.tar.gz
Fix retry logic in ConnectionImpl::newSession.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@945387 13f79535-47bb-0310-9956-ffa450edef68
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;
}