Fix static initialization order fiasco caused by global registry lock (#215)
authorMmanu Chaturvedi <m-chaturvedi@users.noreply.github.com>
Fri, 12 May 2017 21:11:28 +0000 (15:11 -0600)
committerAndreas Schuh <andreas.schuh.84@gmail.com>
Fri, 12 May 2017 21:11:28 +0000 (22:11 +0100)
src/gflags.cc

index 921b4f9..08e4f45 100644 (file)
@@ -726,7 +726,6 @@ class FlagRegistry {
   static FlagRegistry* global_registry_;   // a singleton registry
 
   Mutex lock_;
-  static Mutex global_registry_lock_;
 
   static void InitGlobalRegistry();
 
@@ -929,10 +928,10 @@ bool FlagRegistry::SetFlagLocked(CommandLineFlag* flag,
 
 // Get the singleton FlagRegistry object
 FlagRegistry* FlagRegistry::global_registry_ = NULL;
-Mutex FlagRegistry::global_registry_lock_(Mutex::LINKER_INITIALIZED);
 
 FlagRegistry* FlagRegistry::GlobalRegistry() {
-  MutexLock acquire_lock(&global_registry_lock_);
+  static Mutex lock(Mutex::LINKER_INITIALIZED);
+  MutexLock acquire_lock(&lock);
   if (!global_registry_) {
     global_registry_ = new FlagRegistry;
   }