Fix memory leak of and use without initialization.
Arena allocator's empty arena needs to be released in a destructor, this
removes the neeed for Reset.
The DataflowIterator needs to clear changed_ upon construction to avoid use
without initialization.
Change-Id: I56e3cb8c3e06c08ab0ff42447bd6e05792fc70af
diff --git a/src/compiler/dex/arena_allocator.cc b/src/compiler/dex/arena_allocator.cc
index 2db8445..7f1bfb3 100644
--- a/src/compiler/dex/arena_allocator.cc
+++ b/src/compiler/dex/arena_allocator.cc
@@ -50,6 +50,18 @@
num_arena_blocks_++;
}
+ArenaAllocator::~ArenaAllocator() {
+ // Reclaim all the arena blocks allocated so far.
+ ArenaMemBlock* head = arena_head_;
+ while (head != NULL) {
+ ArenaMemBlock* p = head;
+ head = head->next;
+ free(p);
+ }
+ arena_head_ = current_arena_ = NULL;
+ num_arena_blocks_ = 0;
+}
+
// Return an arena with no storage for use as a sentinal.
ArenaAllocator::ArenaMemBlock* ArenaAllocator::EmptyArena() {
ArenaMemBlock* res = static_cast<ArenaMemBlock*>(malloc(sizeof(ArenaMemBlock)));
@@ -91,19 +103,6 @@
return ptr;
}
-// Reclaim all the arena blocks allocated so far.
-void ArenaAllocator::ArenaReset() {
- ArenaMemBlock* head = arena_head_;
- while (head != NULL) {
- ArenaMemBlock* p = head;
- head = head->next;
- free(p);
- }
- // We must always have an arena. Create a zero-length one.
- arena_head_ = current_arena_ = EmptyArena();
- num_arena_blocks_ = 1;
-}
-
// Dump memory usage stats.
void ArenaAllocator::DumpMemStats(std::ostream& os) const {
size_t total = 0;