Fix lock order inversion between ManagedStatic and Statistic
authorBob Haarman <llvm@inglorion.net>
Tue, 17 Apr 2018 23:37:18 +0000 (23:37 +0000)
committerBob Haarman <llvm@inglorion.net>
Tue, 17 Apr 2018 23:37:18 +0000 (23:37 +0000)
commit37a9269cc75a03665ab78eeff4cead1509e1770d
tree51b58dee86415ab920c830852e995d4bff300a6a
parent3108802f1696a3635d7e1edcc3fbe523381ed5df
Fix lock order inversion between ManagedStatic and Statistic

Summary:
Statistic and ManagedStatic both use mutexes. There was a lock order
inversion where, during initialization, Statistic's mutex would be
held while taking ManagedStatic's, and in llvm_shutdown,
ManagedStatic's mutex would be held while taking Statistic's
mutex. This change causes Statistic's initialization code to avoid
holding its mutex while calling ManagedStatic's methods, avoiding the
inversion.

Reviewers: dsanders, rtereshin

Reviewed By: dsanders

Subscribers: hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D45398

llvm-svn: 330236
llvm/lib/Support/Statistic.cpp