From d17ea665515f0c54d100c6fc973632431379f64b Mon Sep 17 00:00:00 2001 From: Dominic Hamon Date: Thu, 3 Jun 2021 16:08:00 +0100 Subject: [PATCH] Fix leak in test, and provide path to remove leak from library (#1169) * Fix leak in test, and provide path to remove leak from library * make doc change --- README.md | 1 + include/benchmark/benchmark.h | 3 +++ src/benchmark.cc | 4 ++++ test/benchmark_gtest.cc | 2 ++ 4 files changed, 10 insertions(+) diff --git a/README.md b/README.md index 41cada95..79472294 100644 --- a/README.md +++ b/README.md @@ -1243,6 +1243,7 @@ int main(int argc, char** argv) { benchmark::RegisterBenchmark(test_input.name(), BM_test, test_input); benchmark::Initialize(&argc, argv); benchmark::RunSpecifiedBenchmarks(); + benchmark::Shutdown(); } ``` diff --git a/include/benchmark/benchmark.h b/include/benchmark/benchmark.h index 5b53debd..290c5c50 100644 --- a/include/benchmark/benchmark.h +++ b/include/benchmark/benchmark.h @@ -42,6 +42,7 @@ BENCHMARK(BM_StringCopy); int main(int argc, char** argv) { benchmark::Initialize(&argc, argv); benchmark::RunSpecifiedBenchmarks(); + benchmark::Shutdown(); return 0; } @@ -274,6 +275,7 @@ class BenchmarkReporter; class MemoryManager; void Initialize(int* argc, char** argv); +void Shutdown(); // Report to stdout all arguments in 'argv' as unrecognized except the first. // Returns true there is at least on unrecognized argument (i.e. 'argc' > 1). @@ -1314,6 +1316,7 @@ class Fixture : public internal::Benchmark { ::benchmark::Initialize(&argc, argv); \ if (::benchmark::ReportUnrecognizedArguments(argc, argv)) return 1; \ ::benchmark::RunSpecifiedBenchmarks(); \ + ::benchmark::Shutdown(); \ return 0; \ } \ int main(int, char**) diff --git a/src/benchmark.cc b/src/benchmark.cc index 443ffbf9..c4392bfd 100644 --- a/src/benchmark.cc +++ b/src/benchmark.cc @@ -548,6 +548,10 @@ void Initialize(int* argc, char** argv) { internal::LogLevel() = FLAGS_v; } +void Shutdown() { + delete internal::global_context; +} + bool ReportUnrecognizedArguments(int argc, char** argv) { for (int i = 1; i < argc; ++i) { fprintf(stderr, "%s: error: unrecognized command-line flag: %s\n", argv[0], diff --git a/test/benchmark_gtest.cc b/test/benchmark_gtest.cc index cbbf48b3..14a885ba 100644 --- a/test/benchmark_gtest.cc +++ b/test/benchmark_gtest.cc @@ -143,6 +143,7 @@ TEST(AddCustomContext, Simple) { testing::UnorderedElementsAre(testing::Pair("foo", "bar"), testing::Pair("baz", "qux"))); + delete global_context; global_context = nullptr; } @@ -155,6 +156,7 @@ TEST(AddCustomContext, DuplicateKey) { EXPECT_THAT(*global_context, testing::UnorderedElementsAre(testing::Pair("foo", "bar"))); + delete global_context; global_context = nullptr; }