diff options
author | Gordon Sim <gsim@apache.org> | 2007-10-18 14:11:14 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2007-10-18 14:11:14 +0000 |
commit | 7f325f32bf02007add378df60c50c554f37567af (patch) | |
tree | a21693dcd332b89f66d42e8b16ec39bfcae50a5b /cpp/src | |
parent | 07969f395f233bf940029304f06fa0fd7bfcd193 (diff) | |
download | qpid-python-7f325f32bf02007add378df60c50c554f37567af.tar.gz |
Lock active session id map when removing id for closed session.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@585968 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/qpid/broker/SessionManager.cpp | 6 | ||||
-rw-r--r-- | cpp/src/qpid/broker/SessionManager.h | 1 | ||||
-rw-r--r-- | cpp/src/qpid/broker/SessionState.cpp | 2 |
3 files changed, 8 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/SessionManager.cpp b/cpp/src/qpid/broker/SessionManager.cpp index e422e50657..303687c788 100644 --- a/cpp/src/qpid/broker/SessionManager.cpp +++ b/cpp/src/qpid/broker/SessionManager.cpp @@ -82,6 +82,12 @@ std::auto_ptr<SessionState> SessionManager::resume( return state; } +void SessionManager::erase(const framing::Uuid& id) +{ + Mutex::ScopedLock l(lock); + active.erase(id); +} + void SessionManager::eraseExpired() { // Called with lock held. if (!suspended.empty()) { diff --git a/cpp/src/qpid/broker/SessionManager.h b/cpp/src/qpid/broker/SessionManager.h index bbe969de6c..58a7b3f01f 100644 --- a/cpp/src/qpid/broker/SessionManager.h +++ b/cpp/src/qpid/broker/SessionManager.h @@ -67,6 +67,7 @@ class SessionManager : private boost::noncopyable { Suspended suspended; Active active; + void erase(const framing::Uuid&); void eraseExpired(); friend class SessionState; // removes deleted sessions from active set. }; diff --git a/cpp/src/qpid/broker/SessionState.cpp b/cpp/src/qpid/broker/SessionState.cpp index b56aa106a3..17537e11be 100644 --- a/cpp/src/qpid/broker/SessionState.cpp +++ b/cpp/src/qpid/broker/SessionState.cpp @@ -49,7 +49,7 @@ SessionState::SessionState(SessionManager& f, SessionHandler& h, uint32_t timeou SessionState::~SessionState() { // Remove ID from active session list. - factory.active.erase(getId()); + factory.erase(getId()); } SessionHandler& SessionState::getHandler() { |