[llvm] r211066 - Users of the llvm global mutex must now acquire it manually.

Zachary Turner zturner at google.com
Tue Jun 17 09:45:51 PDT 2014


This change was reverted in r211072 due to accidentally pushing a whole
branch instead of a single CL.


On Mon, Jun 16, 2014 at 3:39 PM, Zachary Turner <zturner at google.com> wrote:

> Author: zturner
> Date: Mon Jun 16 17:39:38 2014
> New Revision: 211066
>
> URL: http://llvm.org/viewvc/llvm-project?rev=211066&view=rev
> Log:
> Users of the llvm global mutex must now acquire it manually.
>
> This allows the mutex to be acquired in a guarded, RAII fashion.
>
> Modified:
>     llvm/trunk/include/llvm/Support/Mutex.h
>     llvm/trunk/include/llvm/Support/Threading.h
>     llvm/trunk/lib/Support/ManagedStatic.cpp
>     llvm/trunk/lib/Support/Threading.cpp
>     llvm/trunk/lib/Support/Timer.cpp
>
> Modified: llvm/trunk/include/llvm/Support/Mutex.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Mutex.h?rev=211066&r1=211065&r2=211066&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/Mutex.h (original)
> +++ llvm/trunk/include/llvm/Support/Mutex.h Mon Jun 16 17:39:38 2014
> @@ -15,11 +15,13 @@
>  #define LLVM_SUPPORT_MUTEX_H
>
>  #include "llvm/Support/Compiler.h"
> -#include "llvm/Support/Threading.h"
>  #include <cassert>
>
>  namespace llvm
>  {
> +  // Forward declare.
> +  bool llvm_is_multithreaded();
> +
>    namespace sys
>    {
>      /// @brief Platform agnostic Mutex class.
>
> Modified: llvm/trunk/include/llvm/Support/Threading.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/Threading.h?rev=211066&r1=211065&r2=211066&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/Threading.h (original)
> +++ llvm/trunk/include/llvm/Support/Threading.h Mon Jun 16 17:39:38 2014
> @@ -14,7 +14,12 @@
>  #ifndef LLVM_SUPPORT_THREADING_H
>  #define LLVM_SUPPORT_THREADING_H
>
> +#include "llvm/Support/Mutex.h"
> +
>  namespace llvm {
> +  /// llvm_get_global_lock - returns the llvm global lock object.
> +  sys::Mutex& llvm_get_global_lock();
> +
>    /// llvm_start_multithreaded - Allocate and initialize structures
> needed to
>    /// make LLVM safe for multithreading.  The return value indicates
> whether
>    /// multithreaded initialization succeeded.  LLVM will still be
> operational
> @@ -33,14 +38,6 @@ namespace llvm {
>    /// mode or not.
>    bool llvm_is_multithreaded();
>
> -  /// acquire_global_lock - Acquire the global lock.  This is a no-op if
> called
> -  /// before llvm_start_multithreaded().
> -  void llvm_acquire_global_lock();
> -
> -  /// release_global_lock - Release the global lock.  This is a no-op if
> called
> -  /// before llvm_start_multithreaded().
> -  void llvm_release_global_lock();
> -
>    /// llvm_execute_on_thread - Execute the given \p UserFn on a separate
>    /// thread, passing it the provided \p UserData.
>    ///
>
> Modified: llvm/trunk/lib/Support/ManagedStatic.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/ManagedStatic.cpp?rev=211066&r1=211065&r2=211066&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/ManagedStatic.cpp (original)
> +++ llvm/trunk/lib/Support/ManagedStatic.cpp Mon Jun 16 17:39:38 2014
> @@ -14,6 +14,7 @@
>  #include "llvm/Support/ManagedStatic.h"
>  #include "llvm/Config/config.h"
>  #include "llvm/Support/Atomic.h"
> +#include "llvm/Support/MutexGuard.h"
>  #include <cassert>
>  using namespace llvm;
>
> @@ -23,7 +24,7 @@ void ManagedStaticBase::RegisterManagedS
>                                                void (*Deleter)(void*))
> const {
>    assert(Creator);
>    if (llvm_is_multithreaded()) {
> -    llvm_acquire_global_lock();
> +    llvm::MutexGuard Lock(llvm::llvm_get_global_lock());
>
>      if (!Ptr) {
>        void* tmp = Creator();
> @@ -43,8 +44,6 @@ void ManagedStaticBase::RegisterManagedS
>        Next = StaticList;
>        StaticList = this;
>      }
> -
> -    llvm_release_global_lock();
>    } else {
>      assert(!Ptr && !DeleterFn && !Next &&
>             "Partially initialized ManagedStatic!?");
>
> Modified: llvm/trunk/lib/Support/Threading.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Threading.cpp?rev=211066&r1=211065&r2=211066&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Threading.cpp (original)
> +++ llvm/trunk/lib/Support/Threading.cpp Mon Jun 16 17:39:38 2014
> @@ -21,13 +21,15 @@ using namespace llvm;
>
>  static bool multithreaded_mode = false;
>
> -static sys::Mutex* global_lock = nullptr;
> +sys::Mutex& llvm::llvm_get_global_lock() {
> +  static sys::Mutex global_lock;
> +  return global_lock;
> +}
>
>  bool llvm::llvm_start_multithreaded() {
>  #if LLVM_ENABLE_THREADS != 0
>    assert(!multithreaded_mode && "Already multithreaded!");
>    multithreaded_mode = true;
> -  global_lock = new sys::Mutex(true);
>
>    // We fence here to ensure that all initialization is complete BEFORE we
>    // return from llvm_start_multithreaded().
> @@ -47,7 +49,6 @@ void llvm::llvm_stop_multithreaded() {
>    sys::MemoryFence();
>
>    multithreaded_mode = false;
> -  delete global_lock;
>  #endif
>  }
>
> @@ -55,14 +56,6 @@ bool llvm::llvm_is_multithreaded() {
>    return multithreaded_mode;
>  }
>
> -void llvm::llvm_acquire_global_lock() {
> -  if (multithreaded_mode) global_lock->acquire();
> -}
> -
> -void llvm::llvm_release_global_lock() {
> -  if (multithreaded_mode) global_lock->release();
> -}
> -
>  #if LLVM_ENABLE_THREADS != 0 && defined(HAVE_PTHREAD_H)
>  #include <pthread.h>
>
>
> Modified: llvm/trunk/lib/Support/Timer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Timer.cpp?rev=211066&r1=211065&r2=211066&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/Timer.cpp (original)
> +++ llvm/trunk/lib/Support/Timer.cpp Mon Jun 16 17:39:38 2014
> @@ -18,7 +18,7 @@
>  #include "llvm/Support/FileSystem.h"
>  #include "llvm/Support/Format.h"
>  #include "llvm/Support/ManagedStatic.h"
> -#include "llvm/Support/Mutex.h"
> +#include "llvm/support/MutexGuard.h"
>  #include "llvm/Support/Process.h"
>  #include "llvm/Support/raw_ostream.h"
>  using namespace llvm;
> @@ -84,14 +84,13 @@ static TimerGroup *getDefaultTimerGroup(
>    sys::MemoryFence();
>    if (tmp) return tmp;
>
> -  llvm_acquire_global_lock();
> +  llvm::MutexGuard Lock(llvm::llvm_get_global_lock());
>    tmp = DefaultTimerGroup;
>    if (!tmp) {
>      tmp = new TimerGroup("Miscellaneous Ungrouped Timers");
>      sys::MemoryFence();
>      DefaultTimerGroup = tmp;
>    }
> -  llvm_release_global_lock();
>
>    return tmp;
>  }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140617/f1855b53/attachment.html>


More information about the llvm-commits mailing list