summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Luis A. Lozano <llozano@google.com> 2017-09-19 17:33:48 -0700
committer Luis A. Lozano <llozano@google.com> 2017-10-09 18:06:34 -0700
commit8196d2cce90dfcafa3fe06534e2b6768a3cd034e (patch)
tree0a1c5c80d8f5800f3112254c7a89634fb1d16f47
parent71f6de410f183d27485775172cb00f9c9f59951c (diff)
Fix "use of memory after freed" warning.
Static analyzer gets confused in the code to free a linked list. To avoid confusion add an "assert" to tell the analyzer there is no alias between the memory being deleted and accessed. Bug: b/27101951 Test: Warning is gone. Change-Id: Ia6661ee76908c2025b5e1a764d25ba3e11bf44c8
-rw-r--r--libs/binder/MemoryDealer.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/libs/binder/MemoryDealer.cpp b/libs/binder/MemoryDealer.cpp
index 2a15773aa3..1cfe02a3fe 100644
--- a/libs/binder/MemoryDealer.cpp
+++ b/libs/binder/MemoryDealer.cpp
@@ -289,7 +289,15 @@ SimpleBestFitAllocator::SimpleBestFitAllocator(size_t size)
SimpleBestFitAllocator::~SimpleBestFitAllocator()
{
while(!mList.isEmpty()) {
- delete mList.remove(mList.head());
+ chunk_t* removed = mList.remove(mList.head());
+#ifdef __clang_analyzer__
+ // Clang static analyzer gets confused in this loop
+ // and generates a false positive warning about accessing
+ // memory that is already freed.
+ // Add an "assert" to avoid the confusion.
+ LOG_ALWAYS_FATAL_IF(mList.head() == removed);
+#endif
+ delete removed;
}
}