summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/SuspendedSessions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/broker/SuspendedSessions.cpp')
-rw-r--r--cpp/src/qpid/broker/SuspendedSessions.cpp28
1 files changed, 15 insertions, 13 deletions
diff --git a/cpp/src/qpid/broker/SuspendedSessions.cpp b/cpp/src/qpid/broker/SuspendedSessions.cpp
index cc90f04809..1cd0710f1e 100644
--- a/cpp/src/qpid/broker/SuspendedSessions.cpp
+++ b/cpp/src/qpid/broker/SuspendedSessions.cpp
@@ -31,25 +31,27 @@ typedef Mutex::ScopedLock Lock;
void SuspendedSessions::suspend(SessionState& s) {
Lock l(lock);
- assert(s.isActive());
- AbsTime expires(now(), Duration(s.timeout*TIME_SEC));
- suspended.insert(std::make_pair(expires, s));
- s.active = false;
+ assert(s.state == SessionState::ACTIVE);
+ if (s.timeout == 0)
+ s.state = SessionState::CLOSED;
+ else {
+ AbsTime expires(now(), Duration(s.timeout*TIME_SEC));
+ suspended.insert(std::make_pair(expires, s));
+ s.state = SessionState::SUSPENDED;
+ }
}
SessionState SuspendedSessions::resume(const Uuid& id)
{
Lock l(lock);
- Map::iterator expired = suspended.lower_bound(now());
- suspended.erase(suspended.begin(), expired);
-
- Map::iterator resume = std::find_if(
- suspended.begin(), suspended.end(),
- bind(&SessionState::getId, bind(&Map::value_type::second, _1))==id);
-
- if (resume == suspended.end())
+ Map::iterator notExpired = suspended.lower_bound(now());
+ suspended.erase(suspended.begin(), notExpired);
+ Map::iterator i = suspended.begin();
+ while (i != suspended.end() && i->second.getId() != id)
+ ++i;
+ if (i == suspended.end())
throw Exception(QPID_MSG("Session timed out or invalid ID: " << id));
- return resume->second;
+ return i->second;
}
}} // namespace qpid::broker