From 56731116e0eb7736f8fda38c2c75695c13f9869d Mon Sep 17 00:00:00 2001 From: Ali Maredia Date: Thu, 15 Sep 2022 14:43:37 -0400 Subject: [PATCH] common: add destructor to intrusive_lru values created during inserts that are unreferenced are not deleted because evict() does not delete values unless set.size() > lru_target_size. For example, this condition is not met if the number of entries in the intrusive_lru are less than or equal to lru_target_size at the time of the intrusive_lru's destruction. Memory leaks due to the above scenario can be reproduced if this commit is removed and unittest_intrusive_lru is run under valgrind. ex: valgrind --tool=memcheck --leak-check=yes ./bin/unittest_intrusive_lru Signed-off-by: Ali Maredia (cherry picked from commit abd84ad770ffe10771aeae060514a42e76150569) --- src/common/intrusive_lru.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/intrusive_lru.h b/src/common/intrusive_lru.h index 422c24a14fb61..2837f67984b3d 100644 --- a/src/common/intrusive_lru.h +++ b/src/common/intrusive_lru.h @@ -166,6 +166,10 @@ public: evict(); } + ~intrusive_lru() { + set_target_size(0); + } + friend void intrusive_ptr_add_ref<>(intrusive_lru_base *); friend void intrusive_ptr_release<>(intrusive_lru_base *); }; -- 2.39.5