[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