forked from OSchip/llvm-project
Get rid of a global constructor that was causing a warning on MacOSX and make the Timer safe to use after the main threads global destructor chain is called.
llvm-svn: 264346
This commit is contained in:
parent
ae81c29352
commit
8e1232af42
|
@ -86,7 +86,6 @@ protected:
|
|||
|
||||
static std::atomic<bool> g_quiet;
|
||||
static std::atomic<unsigned> g_display_depth;
|
||||
static std::mutex g_file_mutex;
|
||||
|
||||
private:
|
||||
Timer();
|
||||
|
|
|
@ -39,7 +39,18 @@ namespace
|
|||
|
||||
std::atomic<bool> Timer::g_quiet(true);
|
||||
std::atomic<unsigned> Timer::g_display_depth(0);
|
||||
std::mutex Timer::g_file_mutex;
|
||||
static std::mutex &
|
||||
GetFileMutex()
|
||||
{
|
||||
static std::mutex *g_file_mutex_ptr = nullptr;
|
||||
static std::once_flag g_once_flag;
|
||||
std::call_once(g_once_flag, []() {
|
||||
// leaked on purpose to ensure this mutex works after main thread has run
|
||||
// global C++ destructor chain
|
||||
g_file_mutex_ptr = new std::mutex();
|
||||
});
|
||||
return *g_file_mutex_ptr;
|
||||
}
|
||||
|
||||
|
||||
static Mutex &
|
||||
|
@ -97,7 +108,7 @@ Timer::Timer (const char *category, const char *format, ...) :
|
|||
{
|
||||
if (g_quiet == false)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(g_file_mutex);
|
||||
std::lock_guard<std::mutex> lock(GetFileMutex());
|
||||
|
||||
// Indent
|
||||
::fprintf(stdout, "%*s", stack->m_depth * TIMER_INDENT_AMOUNT, "");
|
||||
|
@ -152,7 +163,7 @@ Timer::~Timer()
|
|||
|
||||
if (g_quiet == false)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(g_file_mutex);
|
||||
std::lock_guard<std::mutex> lock(GetFileMutex());
|
||||
::fprintf(stdout, "%*s%.9f sec (%.9f sec)\n", (stack->m_depth - 1) * TIMER_INDENT_AMOUNT, "",
|
||||
total_nsec / 1000000000.0, timer_nsec / 1000000000.0);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue