[llvm] r304156 - [Timer] Move DefaultTimerGroup into a ManagedStatic.

Benjamin Kramer via llvm-commits llvm-commits at lists.llvm.org
Mon May 29 07:05:29 PDT 2017


Author: d0k
Date: Mon May 29 09:05:29 2017
New Revision: 304156

URL: http://llvm.org/viewvc/llvm-project?rev=304156&view=rev
Log:
[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.

Modified:
    llvm/trunk/lib/Support/Timer.cpp

Modified: llvm/trunk/lib/Support/Timer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Timer.cpp?rev=304156&r1=304155&r2=304156&view=diff
==============================================================================
--- llvm/trunk/lib/Support/Timer.cpp (original)
+++ llvm/trunk/lib/Support/Timer.cpp Mon May 29 09:05:29 2017
@@ -72,10 +72,11 @@ std::unique_ptr<raw_fd_ostream> llvm::Cr
   return llvm::make_unique<raw_fd_ostream>(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<TimerGroup, CreateDefaultTimerGroup> DefaultTimerGroup;
+static TimerGroup *getDefaultTimerGroup() { return &*DefaultTimerGroup; }
 
 //===----------------------------------------------------------------------===//
 // Timer Implementation




More information about the llvm-commits mailing list