summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/SuspendedSessions.cpp
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-08-27 20:39:35 +0000
committerAlan Conway <aconway@apache.org>2007-08-27 20:39:35 +0000
commitd52cb3fdccb2c18fa91c8331b4a09e4ea032ff1c (patch)
treefd21a8d5693446309ecaac3d73d2d3f7a01af284 /cpp/src/qpid/broker/SuspendedSessions.cpp
parent7959f701c9420511009d3124a6d86fd8c652b439 (diff)
downloadqpid-python-d52cb3fdccb2c18fa91c8331b4a09e4ea032ff1c.tar.gz
* src/qpid/framing/FrameDefaultVisitor.h:
A visitor for all concrete frame body types. * src/qpid/broker/SessionState.h: 3 states - closed, active, suspended. * src/qpid/broker/SessionAdapter.h, .cpp: Session handler, implements session class commands. In progres.. * rubygen/templates/MethodBodyDefaultVisitor.rb: A visitor for all method body types. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@570236 13f79535-47bb-0310-9956-ffa450edef68
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