From: Masud Hasan (mashasan) Date: Wed, 20 Jan 2021 15:57:18 +0000 (+0000) Subject: Merge pull request #2704 in SNORT/snort3 from ~ANTOROZC/snort3:opoluian_cert_cache_si... X-Git-Tag: 3.1.1.0~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ba71fdd6cecc7d481306b37de0cbe05fa6982f91;p=thirdparty%2Fsnort3.git Merge pull request #2704 in SNORT/snort3 from ~ANTOROZC/snort3:opoluian_cert_cache_size to master Squashed commit of the following: commit be2fccccd8674196c0454f70b749534bdc150c0e Author: Oleh Poluianskyi Date: Thu Jan 14 19:32:19 2021 +0200 lrucache: changes for memcap for support constant cache objects with variable size. --- diff --git a/src/hash/lru_cache_shared.h b/src/hash/lru_cache_shared.h index a3dd6dc53..8e7c03c6e 100644 --- a/src/hash/lru_cache_shared.h +++ b/src/hash/lru_cache_shared.h @@ -152,13 +152,15 @@ protected: // decouples the current_size variable from the actual size in memory, // so these functions should only be called when something is actually // added or removed from memory (e.g. in find_else_insert, remove, etc). - virtual void increase_size() + virtual void increase_size(ValueType* value_ptr=nullptr) { + UNUSED(value_ptr); current_size++; } - virtual void decrease_size() + virtual void decrease_size(ValueType* value_ptr=nullptr) { + UNUSED(value_ptr); current_size--; } @@ -172,7 +174,7 @@ protected: { list_iter = --list.end(); data.emplace_back(list_iter->second); // increase reference count - decrease_size(); + decrease_size(list_iter->second.get()); map.erase(list_iter->first); list.erase(list_iter); ++stats.alloc_prunes; @@ -258,7 +260,7 @@ find_else_create(const Key& key, bool* new_data) // Add key/data pair to front of list. list.emplace_front(std::make_pair(key, data)); - increase_size(); + increase_size(data.get()); // Add list iterator for the new entry to map. map[key] = list.begin(); @@ -284,8 +286,10 @@ find_else_insert(const Key& key, std::shared_ptr& data, bool replace) if (replace) { // Explicitly calling the reset so its more clear that destructor could be called for the object + decrease_size(map_iter->second->second.get()); map_iter->second->second.reset(); map_iter->second->second = data; + increase_size(map_iter->second->second.get()); stats.replaced++; } list.splice(list.begin(), list, map_iter->second); // update LRU @@ -297,7 +301,7 @@ find_else_insert(const Key& key, std::shared_ptr& data, bool replace) // Add key/data pair to front of list. list.emplace_front(std::make_pair(key, data)); - increase_size(); + increase_size(data.get()); // Add list iterator for the new entry to map. map[key] = list.begin(); @@ -350,7 +354,7 @@ bool LruCacheShared::remove(const Key& key) data = map_iter->second->second; - decrease_size(); + decrease_size(data.get()); list.erase(map_iter->second); map.erase(map_iter); stats.removes++; @@ -378,7 +382,7 @@ bool LruCacheShared::remove(const Key& key, std::shared_pt data = map_iter->second->second; - decrease_size(); + decrease_size(data.get()); list.erase(map_iter->second); map.erase(map_iter); stats.removes++; diff --git a/src/host_tracker/host_cache.h b/src/host_tracker/host_cache.h index bd80e7abe..9f4541cc7 100644 --- a/src/host_tracker/host_cache.h +++ b/src/host_tracker/host_cache.h @@ -209,13 +209,15 @@ private: } } - void increase_size() override + void increase_size(ValueType* value_ptr=nullptr) override { + UNUSED(value_ptr); current_size += mem_chunk; } - void decrease_size() override + void decrease_size(ValueType* value_ptr=nullptr) override { + UNUSED(value_ptr); assert( current_size >= mem_chunk ); current_size -= mem_chunk; }