diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2018-12-03 12:35:21 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-12-03 12:59:12 +0000 |
commit | 41c68aa41cd21a0298eeea1dfbf935e1e4106d13 (patch) | |
tree | 5300c816ea855d5c9fa039e3d40fe6deb4f9332e /CommonLibs | |
parent | 39e0bbaccaa8b0079d7ff32b0b1f1a289d23eb33 (diff) |
PointerFIFO: Fix memleak of ListNode
Found by ASan. when PointerFIFO::release() is called, alloicated node
being released is actually stored into an internal list for later-reuse
without having to access memory allocator. However, nodes from this
list are never freed.
Change-Id: I40e5e28603cde67005d9d92772967b05465ea2b8
Diffstat (limited to 'CommonLibs')
-rw-r--r-- | CommonLibs/LinkedLists.cpp | 19 | ||||
-rw-r--r-- | CommonLibs/LinkedLists.h | 1 |
2 files changed, 20 insertions, 0 deletions
diff --git a/CommonLibs/LinkedLists.cpp b/CommonLibs/LinkedLists.cpp index 35a8541..b73a579 100644 --- a/CommonLibs/LinkedLists.cpp +++ b/CommonLibs/LinkedLists.cpp @@ -29,6 +29,25 @@ #include "LinkedLists.h" +PointerFIFO::~PointerFIFO() +{ + ListNode *node, *next; + + node = mHead; + while (node != NULL) { + next = node->next(); + delete node; + node = next; + } + + node = mFreeList; + while (node != NULL) { + next = node->next(); + delete node; + node = next; + } +} + void PointerFIFO::push_front(void* val) // by pat { // Pat added this routine for completeness, but never used or tested. diff --git a/CommonLibs/LinkedLists.h b/CommonLibs/LinkedLists.h index 31fb9c5..136d13d 100644 --- a/CommonLibs/LinkedLists.h +++ b/CommonLibs/LinkedLists.h @@ -70,6 +70,7 @@ class PointerFIFO { :mHead(NULL),mTail(NULL),mFreeList(NULL), mSize(0) {} + ~PointerFIFO(); unsigned size() const { return mSize; } unsigned totalSize() const { return 0; } // Not used in this version. |