From f75e175fc2cbc6638b2c6f3f2aee4604b54f9cb0 Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Wed, 2 Jan 2013 14:25:06 -0800 Subject: [PATCH] Make TaggedCache::del more flexible. --- src/cpp/ripple/TaggedCache.h | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 681457ac5..9b75ee838 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -61,7 +61,7 @@ public: void sweep(); bool touch(const key_type& key); - bool del(const key_type& key); + bool del(const key_type& key, bool valid); bool canonicalize(const key_type& key, boost::shared_ptr& data, bool replace = false); bool store(const key_type& key, const c_Data& data); boost::shared_ptr fetch(const key_type& key); @@ -161,10 +161,18 @@ template bool TaggedCache::touch return true; } -template bool TaggedCache::del(const key_type& key) -{ // Remove from cache, map unaffected +template bool TaggedCache::del(const key_type& key, bool valid) +{ // Remove from cache, if !valid, remove from map too. Returns true if removed from cache boost::recursive_mutex::scoped_lock sl(mLock); + if (!valid) + { // remove from map too + typename boost::unordered_map::iterator mit = mMap.find(key); + if (mit == mMap.end()) // not in map, cannot be in cache + return false; + mMap.erase(mit); + } + typename boost::unordered_map::iterator cit = mCache.find(key); if (cit == mCache.end()) return false;