summaryrefslogtreecommitdiff
path: root/qpid/cpp/src
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2007-10-18 14:11:14 +0000
committerGordon Sim <gsim@apache.org>2007-10-18 14:11:14 +0000
commit514732f5ff170ca5b7b13d8223d2ec55e4c970b1 (patch)
treec775b8703f9fb057f1c3f94a7e8ba7280f0b6be9 /qpid/cpp/src
parent4e5bd398b9ad0e0b49d8521ace36ffa082feeba8 (diff)
downloadqpid-python-514732f5ff170ca5b7b13d8223d2ec55e4c970b1.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@585968 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r--qpid/cpp/src/qpid/broker/SessionManager.cpp6
-rw-r--r--qpid/cpp/src/qpid/broker/SessionManager.h1
-rw-r--r--qpid/cpp/src/qpid/broker/SessionState.cpp2
3 files changed, 8 insertions, 1 deletions
diff --git a/qpid/cpp/src/qpid/broker/SessionManager.cpp b/qpid/cpp/src/qpid/broker/SessionManager.cpp
index e422e50657..303687c788 100644
--- a/qpid/cpp/src/qpid/broker/SessionManager.cpp
+++ b/qpid/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/qpid/cpp/src/qpid/broker/SessionManager.h b/qpid/cpp/src/qpid/broker/SessionManager.h
index bbe969de6c..58a7b3f01f 100644
--- a/qpid/cpp/src/qpid/broker/SessionManager.h
+++ b/qpid/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/qpid/cpp/src/qpid/broker/SessionState.cpp b/qpid/cpp/src/qpid/broker/SessionState.cpp
index b56aa106a3..17537e11be 100644
--- a/qpid/cpp/src/qpid/broker/SessionState.cpp
+++ b/qpid/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() {