diff options
author | Alan Conway <aconway@apache.org> | 2009-10-21 17:03:33 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2009-10-21 17:03:33 +0000 |
commit | 9c12f89c6ee28f2741e288b6155bc900ef1c4f05 (patch) | |
tree | 2fa86b352e831781245f4c27092bad77dcff2aa0 /cpp/src/qpid/client/SessionImpl.cpp | |
parent | 4214ec3e632be1f9a8cb1553280c5948fa9161bb (diff) | |
download | qpid-python-9c12f89c6ee28f2741e288b6155bc900ef1c4f05.tar.gz |
Fix problems with sessions going out of scope and session numbers wrapping around.
Fixes QPID-1789: sessions that go out of scope without being detached will
detach themselves.
Also fixes several issues that arise when the session numbers wraps around
and start re-using old numbers.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@828108 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/client/SessionImpl.cpp')
-rw-r--r-- | cpp/src/qpid/client/SessionImpl.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/cpp/src/qpid/client/SessionImpl.cpp b/cpp/src/qpid/client/SessionImpl.cpp index 32541dceac..d443a1170b 100644 --- a/cpp/src/qpid/client/SessionImpl.cpp +++ b/cpp/src/qpid/client/SessionImpl.cpp @@ -65,7 +65,8 @@ SessionImpl::SessionImpl(const std::string& name, boost::shared_ptr<ConnectionIm nextIn(0), nextOut(0), sendMsgCredit(0), - doClearDeliveryPropertiesExchange(true) + doClearDeliveryPropertiesExchange(true), + autoDetach(true) { channel.next = connectionShared.get(); } @@ -73,8 +74,11 @@ SessionImpl::SessionImpl(const std::string& name, boost::shared_ptr<ConnectionIm SessionImpl::~SessionImpl() { { Lock l(state); - if (state != DETACHED) { - QPID_LOG(warning, "Session was not closed cleanly"); + if (state != DETACHED && state != DETACHING) { + QPID_LOG(warning, "Session was not closed cleanly: " << id); + // Inform broker but don't wait for detached as that deadlocks. + // The detached will be ignored as the channel will be invalid. + if (autoDetach) detach(); setState(DETACHED); handleClosed(); state.waitWaiters(); @@ -816,4 +820,6 @@ boost::shared_ptr<ConnectionImpl> SessionImpl::getConnection() return connectionWeak.lock(); } +void SessionImpl::disableAutoDetach() { autoDetach = false; } + }} |