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);


Reply via email to