From 6d432cf813c3beeed86e2666f732f5a5baa91ad8 Mon Sep 17 00:00:00 2001 From: Benjamin Kramer Date: Mon, 29 May 2017 14:05:29 +0000 Subject: [PATCH] [Timer] Move DefaultTimerGroup into a ManagedStatic. This used to be just leaked. r295370 made it use magic statics. This adds a global destructor, which is something we'd like to avoid. It also creates a weird situation where the mutex used by TimerGroup is re-created during global shutdown and leaked. Using a ManagedStatic here is also subtle as it relies on the mutex inside of ManagedStatic to be recursive. I've added a test for that in a previous change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304156 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Support/Timer.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/Support/Timer.cpp b/lib/Support/Timer.cpp index 8d68c6ae968..4cb04c164f0 100644 --- a/lib/Support/Timer.cpp +++ b/lib/Support/Timer.cpp @@ -72,10 +72,11 @@ std::unique_ptr llvm::CreateInfoOutputFile() { return llvm::make_unique(2, false); // stderr. } -static TimerGroup *getDefaultTimerGroup() { - static TimerGroup DefaultTimerGroup("misc", "Miscellaneous Ungrouped Timers"); - return &DefaultTimerGroup; +static void *CreateDefaultTimerGroup() { + return new TimerGroup("misc", "Miscellaneous Ungrouped Timers"); } +static ManagedStatic DefaultTimerGroup; +static TimerGroup *getDefaultTimerGroup() { return &*DefaultTimerGroup; } //===----------------------------------------------------------------------===// // Timer Implementation -- 2.40.0