Don't acquire the mutex during the destructor of PassRegistry.
authorZachary Turner <zturner@google.com>
Wed, 11 Jun 2014 23:03:31 +0000 (23:03 +0000)
committerZachary Turner <zturner@google.com>
Wed, 11 Jun 2014 23:03:31 +0000 (23:03 +0000)
This destructor is run as part of static program termination, and
so all ManagedStatics (including this lock) will have been
destroyed by llvm_shutdown.  Furthermore, if there is actually
a race condition during static program termination, then we are
just hiding a bug somewhere else, because other threads should
not be running at this point.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@210717 91177308-0d34-0410-b5e6-96231b3b80d8

lib/IR/PassRegistry.cpp

index 6a5bee2f57b16da0a7d0ff1da047210261c2db63..e85fabffb8ce4377d739a742aec8d6b9cb0628b2 100644 (file)
@@ -73,7 +73,10 @@ void *PassRegistry::getImpl() const {
 //
 
 PassRegistry::~PassRegistry() {
-  sys::SmartScopedWriter<true> Guard(*Lock);
+  // Don't acquire the mutex here.  This is destroyed during static execution of
+  // static destructors, after llvm_shutdown() has been called, so all instances
+  // of all ManagedStatics (including the Mutex), will have been destroyed as
+  // well.
   PassRegistryImpl *Impl = static_cast<PassRegistryImpl*>(pImpl);
   delete Impl;
   pImpl = nullptr;