From: Samuel Just Date: Mon, 21 Oct 2013 20:56:06 +0000 (-0700) Subject: common/shared_cache.hpp: avoid list::size() X-Git-Tag: v0.78~231^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=27b5f2b873daef76791554e8153138af622f2155;p=ceph.git common/shared_cache.hpp: avoid list::size() Signed-off-by: Samuel Just --- diff --git a/src/common/shared_cache.hpp b/src/common/shared_cache.hpp index a435ec4558f6..4d5d4f7b8b7f 100644 --- a/src/common/shared_cache.hpp +++ b/src/common/shared_cache.hpp @@ -29,6 +29,7 @@ class SharedLRU { Mutex lock; size_t max_size; Cond cond; + unsigned size; map >::iterator > contents; list > lru; @@ -36,7 +37,7 @@ class SharedLRU { map weak_refs; void trim_cache(list *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();