diff options
author | Alan Conway <aconway@apache.org> | 2007-08-27 20:39:35 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2007-08-27 20:39:35 +0000 |
commit | d52cb3fdccb2c18fa91c8331b4a09e4ea032ff1c (patch) | |
tree | fd21a8d5693446309ecaac3d73d2d3f7a01af284 /cpp/src/qpid/broker/SuspendedSessions.cpp | |
parent | 7959f701c9420511009d3124a6d86fd8c652b439 (diff) | |
download | qpid-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.cpp | 28 |
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 |