Index: components/metrics/leak_detector/call_stack_manager.cc |
diff --git a/components/metrics/leak_detector/call_stack_manager.cc b/components/metrics/leak_detector/call_stack_manager.cc |
index de9fcd825aca246b786c5ee7bef9902c1c9ef105..dfebd3c7251dc19da6271f570ee28cb963a0e271 100644 |
--- a/components/metrics/leak_detector/call_stack_manager.cc |
+++ b/components/metrics/leak_detector/call_stack_manager.cc |
@@ -16,7 +16,13 @@ namespace leak_detector { |
CallStackManager::CallStackManager() {} |
CallStackManager::~CallStackManager() { |
- for (CallStack* call_stack : call_stacks_) { |
+ // Free all call stack objects and clear |call_stacks_|. Make sure to save the |
+ // CallStack object pointer and remove it from the container before freeing |
+ // the CallStack memory. |
+ while (!call_stacks_.empty()) { |
+ CallStack* call_stack = *call_stacks_.begin(); |
+ call_stacks_.erase(call_stacks_.begin()); |
+ |
CustomAllocator::Free(call_stack->stack, |
call_stack->depth * sizeof(*call_stack->stack)); |
call_stack->stack = nullptr; |
@@ -24,7 +30,6 @@ CallStackManager::~CallStackManager() { |
CustomAllocator::Free(call_stack, sizeof(CallStack)); |
} |
- call_stacks_.clear(); |
} |
const CallStack* CallStackManager::GetCallStack(size_t depth, |