diff options
Diffstat (limited to 'contrib/llvm-project/compiler-rt/lib/gwp_asan/mutex.h')
| -rw-r--r-- | contrib/llvm-project/compiler-rt/lib/gwp_asan/mutex.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/contrib/llvm-project/compiler-rt/lib/gwp_asan/mutex.h b/contrib/llvm-project/compiler-rt/lib/gwp_asan/mutex.h new file mode 100644 index 000000000000..34b91a2880dd --- /dev/null +++ b/contrib/llvm-project/compiler-rt/lib/gwp_asan/mutex.h @@ -0,0 +1,42 @@ +//===-- mutex.h -------------------------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef GWP_ASAN_MUTEX_H_ +#define GWP_ASAN_MUTEX_H_ + +#include "gwp_asan/platform_specific/mutex_fuchsia.h" // IWYU pragma: keep +#include "gwp_asan/platform_specific/mutex_posix.h" // IWYU pragma: keep + +namespace gwp_asan { +class Mutex final : PlatformMutex { +public: + constexpr Mutex() = default; + ~Mutex() = default; + Mutex(const Mutex &) = delete; + Mutex &operator=(const Mutex &) = delete; + // Lock the mutex. + void lock(); + // Nonblocking trylock of the mutex. Returns true if the lock was acquired. + bool tryLock(); + // Unlock the mutex. + void unlock(); +}; + +class ScopedLock { +public: + explicit ScopedLock(Mutex &Mx) : Mu(Mx) { Mu.lock(); } + ~ScopedLock() { Mu.unlock(); } + ScopedLock(const ScopedLock &) = delete; + ScopedLock &operator=(const ScopedLock &) = delete; + +private: + Mutex Μ +}; +} // namespace gwp_asan + +#endif // GWP_ASAN_MUTEX_H_ |
