GN: Fix a memory leak found by LSAN.
Change-Id: I27d42d74889d455ac162c5701868fb5f2e837261
Reviewed-on: https://chromium-review.googlesource.com/885863
Reviewed-by: Dirk Pranke <dpranke@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#532183}
Cr-Mirrored-From: https://chromium.googlesource.com/chromium/src
Cr-Mirrored-Commit: 31360b70f47bcc18df1501ed665793b693469f34diff --git a/tools/gn/builder.cc b/tools/gn/builder.cc
index 4b464af..ec45e6c 100644
--- a/tools/gn/builder.cc
+++ b/tools/gn/builder.cc
@@ -134,7 +134,7 @@
std::vector<const BuilderRecord*> result;
result.reserve(records_.size());
for (const auto& record : records_)
- result.push_back(record.second);
+ result.push_back(record.second.get());
return result;
}
@@ -168,10 +168,8 @@
}
BuilderRecord* Builder::GetRecord(const Label& label) {
- RecordMap::iterator found = records_.find(label);
- if (found == records_.end())
- return nullptr;
- return found->second;
+ auto found = records_.find(label);
+ return (found != records_.end()) ? found->second.get() : nullptr;
}
bool Builder::CheckForBadItems(Err* err) const {
@@ -187,7 +185,7 @@
std::vector<const BuilderRecord*> bad_records;
std::string depstring;
for (const auto& record_pair : records_) {
- const BuilderRecord* src = record_pair.second;
+ const BuilderRecord* src = record_pair.second.get();
if (!src->should_generate())
continue; // Skip ungenerated nodes.
@@ -308,9 +306,10 @@
BuilderRecord* record = GetRecord(label);
if (!record) {
// Not seen this record yet, create a new one.
- record = new BuilderRecord(type, label);
- record->set_originally_referenced_from(request_from);
- records_[label] = record;
+ auto new_record = std::make_unique<BuilderRecord>(type, label);
+ new_record->set_originally_referenced_from(request_from);
+ record = new_record.get();
+ records_[label] = std::move(new_record);
return record;
}
diff --git a/tools/gn/builder.h b/tools/gn/builder.h
index 27a1fb3..58ccbad 100644
--- a/tools/gn/builder.h
+++ b/tools/gn/builder.h
@@ -6,6 +6,7 @@
#define TOOLS_GN_BUILDER_H_
#include <map>
+#include <memory>
#include "base/callback.h"
#include "base/macros.h"
@@ -137,9 +138,7 @@
// Non owning pointer.
Loader* loader_;
- // Owning pointers.
- typedef std::map<Label, BuilderRecord*> RecordMap;
- RecordMap records_;
+ std::map<Label, std::unique_ptr<BuilderRecord>> records_;
ResolvedGeneratedCallback resolved_and_generated_callback_;