From 41c68aa41cd21a0298eeea1dfbf935e1e4106d13 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Mon, 3 Dec 2018 12:35:21 +0100 Subject: 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 --- CommonLibs/LinkedLists.cpp | 19 +++++++++++++++++++ CommonLibs/LinkedLists.h | 1 + 2 files changed, 20 insertions(+) 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. -- cgit v1.2.3