Author: shuston
Date: Wed Nov 19 15:59:49 2008
New Revision: 719133
URL: http://svn.apache.org/viewvc?rev=719133&view=rev
Log:
Replace lower_bound with equivalent loop; resolves QPID-1424
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp
URL:
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp?rev=719133&r1=719132&r2=719133&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/broker/SessionManager.cpp Wed Nov 19
15:59:49 2008
@@ -86,9 +86,14 @@
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);