diff options
Diffstat (limited to 'cpp/src/qpid/broker/SessionManager.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/SessionManager.cpp | 11 |
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); |
