[llvm-commits] [llvm] r73701 - /llvm/trunk/lib/VMCore/Pass.cpp

Owen Anderson resistor at mac.com
Thu Jun 18 09:08:33 PDT 2009


Author: resistor
Date: Thu Jun 18 11:08:27 2009
New Revision: 73701

URL: http://llvm.org/viewvc/llvm-project?rev=73701&view=rev
Log:
As pointed out by Duncan, I accidentally dropped the first MemoryFence of the
double-checked locking pattern here.

Modified:
    llvm/trunk/lib/VMCore/Pass.cpp

Modified: llvm/trunk/lib/VMCore/Pass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Pass.cpp?rev=73701&r1=73700&r2=73701&view=diff

==============================================================================
--- llvm/trunk/lib/VMCore/Pass.cpp (original)
+++ llvm/trunk/lib/VMCore/Pass.cpp Thu Jun 18 11:08:27 2009
@@ -197,17 +197,21 @@
   
   // Use double-checked locking to safely initialize the registrar when
   // we're running in multithreaded mode.
-  if (!PassRegistrarObj) {
+  PassRegistrar* tmp = PassRegistrarObj;
+  sys::MemoryFence();
+  if (!tmp) {
     if (llvm_is_multithreaded()) {
       llvm_acquire_global_lock();
-      if (!PassRegistrarObj) {
-        PassRegistrar* tmp = new PassRegistrar();
+      tmp = PassRegistrarObj;
+      if (!tmp) {
+        tmp = new PassRegistrar();
         sys::MemoryFence();
         PassRegistrarObj = tmp;
       }
       llvm_release_global_lock();
-    } else
+    } else {
       PassRegistrarObj = new PassRegistrar();
+    }
   }
   return PassRegistrarObj;
 }





More information about the llvm-commits mailing list