summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/broker/SessionManager.cpp
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2008-11-19 23:59:49 +0000
committerStephen D. Huston <shuston@apache.org>2008-11-19 23:59:49 +0000
commit9d2348bf43b4d82283c5ae0587322e0786578238 (patch)
tree4851f7d1c7643e5d7a30dbcc79765f9971eb29d9 /cpp/src/qpid/broker/SessionManager.cpp
parentd8dd90ae7856bfe014eda251cf537f0e77594b39 (diff)
downloadqpid-python-9d2348bf43b4d82283c5ae0587322e0786578238.tar.gz
Replace lower_bound with equivalent loop; resolves QPID-1424
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@719133 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/SessionManager.cpp')
-rw-r--r--cpp/src/qpid/broker/SessionManager.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/cpp/src/qpid/broker/SessionManager.cpp b/cpp/src/qpid/broker/SessionManager.cpp
index e7190fdae6..a35488b746 100644
--- a/cpp/src/qpid/broker/SessionManager.cpp
+++ b/cpp/src/qpid/broker/SessionManager.cpp
@@ -86,9 +86,14 @@ void SessionManager::forget(const SessionId& id) {
void SessionManager::eraseExpired() {
// Called with lock held.
if (!detached.empty()) {
- Detached::iterator keep = std::lower_bound(
- detached.begin(), detached.end(), now(),
- boost::bind(std::less<AbsTime>(), boost::bind(&SessionState::expiry, _1), _2));
+ // This used to use a more elegant invocation of std::lower_bound
+ // but violated the strict weak ordering rule which Visual Studio
+ // enforced. See QPID-1424 for more info should you be tempted to
+ // replace the loop with something more elegant.
+ AbsTime now = AbsTime::now();
+ Detached::iterator keep = detached.begin();
+ while ((keep != detached.end()) && ((*keep).expiry < now))
+ keep++;
if (detached.begin() != keep) {
QPID_LOG(debug, "Expiring sessions: " << log::formatList(detached.begin(), keep));
detached.erase(detached.begin(), keep);