]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common/shared_cache.hpp: avoid list::size()
authorSamuel Just <sam.just@inktank.com>
Mon, 21 Oct 2013 20:56:06 +0000 (13:56 -0700)
committerGreg Farnum <greg@inktank.com>
Fri, 31 Jan 2014 23:54:40 +0000 (15:54 -0800)
Signed-off-by: Samuel Just <sam.just@inktank.com>
src/common/shared_cache.hpp

index a435ec4558f6437fe632594b217eadfe67daac49..4d5d4f7b8b7f40c3643ecbf568916bf0fc60e790 100644 (file)
@@ -29,6 +29,7 @@ class SharedLRU {
   Mutex lock;
   size_t max_size;
   Cond cond;
+  unsigned size;
 
   map<K, typename list<pair<K, VPtr> >::iterator > contents;
   list<pair<K, VPtr> > lru;
@@ -36,7 +37,7 @@ class SharedLRU {
   map<K, WeakVPtr> weak_refs;
 
   void trim_cache(list<VPtr> *to_release) {
-    while (lru.size() > max_size) {
+    while (size > max_size) {
       to_release->push_back(lru.back().second);
       lru_remove(lru.back().first);
     }
@@ -46,6 +47,7 @@ class SharedLRU {
     if (!contents.count(key))
       return;
     lru.erase(contents[key]);
+    --size;
     contents.erase(key);
   }
 
@@ -53,6 +55,7 @@ class SharedLRU {
     if (contents.count(key)) {
       lru.splice(lru.begin(), lru, contents[key]);
     } else {
+      ++size;
       lru.push_front(make_pair(key, val));
       contents[key] = lru.begin();
       trim_cache(to_release);
@@ -77,7 +80,8 @@ class SharedLRU {
   };
 
 public:
-  SharedLRU(size_t max_size = 20) : lock("SharedLRU::lock"), max_size(max_size) {}
+  SharedLRU(size_t max_size = 20)
+    : lock("SharedLRU::lock"), max_size(max_size), size(0) {}
   
   ~SharedLRU() {
     contents.clear();