[PATCH] D66313: Re-introduce the RWMutexImpl for macOS < 10.12
Jonas Devlieghere via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 15 15:08:44 PDT 2019
JDevlieghere created this revision.
JDevlieghere added reviewers: bkramer, jfb, ldionne.
Herald added subscribers: kristina, dexonsmith.
Herald added a project: LLVM.
JDevlieghere added a reviewer: arphaman.
Unfortunately, `std::shared_timed_mutex` is only available on macOS 10.12 and later. This prevents LLVM from compiling when you have a deployment target that older. This patch reintroduced the old `RWMutexImpl` but guards it by the macOS availability macro.
Repository:
rL LLVM
https://reviews.llvm.org/D66313
Files:
llvm/include/llvm/Support/RWMutex.h
Index: llvm/include/llvm/Support/RWMutex.h
===================================================================
--- llvm/include/llvm/Support/RWMutex.h
+++ llvm/include/llvm/Support/RWMutex.h
@@ -31,8 +31,71 @@
// on Windows and always available on MSVC.
#if defined(_MSC_VER) || __cplusplus > 201402L
std::shared_mutex impl;
+#else
+ // std::shared_timed_mutex is only availble on macOS 10.12 and later.
+#if defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \
+ defined(__MAC_10_12) && \
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < __MAC_10_12
+ /// Platform agnostic RWMutex class.
+ /// Platform agnostic RWMutex class.
+ class RWMutexImpl {
+ /// @name Constructors
+ /// @{
+ public:
+ /// Initializes the lock but doesn't acquire it.
+ /// Default Constructor.
+ explicit RWMutexImpl();
+
+ /// @}
+ /// @name Do Not Implement
+ /// @{
+ RWMutexImpl(const RWMutexImpl &original) = delete;
+ RWMutexImpl &operator=(const RWMutexImpl &) = delete;
+ /// @}
+
+ /// Releases and removes the lock
+ /// Destructor
+ ~RWMutexImpl();
+
+ /// @}
+ /// @name Methods
+ /// @{
+ public:
+ /// Attempts to unconditionally acquire the lock in reader mode. If the
+ /// lock is held by a writer, this method will wait until it can acquire
+ /// the lock.
+ /// @returns false if any kind of error occurs, true otherwise.
+ /// Unconditionally acquire the lock in reader mode.
+ bool reader_acquire();
+
+ /// Attempts to release the lock in reader mode.
+ /// @returns false if any kind of error occurs, true otherwise.
+ /// Unconditionally release the lock in reader mode.
+ bool reader_release();
+
+ /// Attempts to unconditionally acquire the lock in reader mode. If the
+ /// lock is held by any readers, this method will wait until it can
+ /// acquire the lock.
+ /// @returns false if any kind of error occurs, true otherwise.
+ /// Unconditionally acquire the lock in writer mode.
+ bool writer_acquire();
+
+ /// Attempts to release the lock in writer mode.
+ /// @returns false if any kind of error occurs, true otherwise.
+ /// Unconditionally release the lock in write mode.
+ bool writer_release();
+
+ //@}
+ /// @name Platform Dependent Data
+ /// @{
+ private:
+#if defined(LLVM_ENABLE_THREADS) && LLVM_ENABLE_THREADS != 0
+ void *data_ = nullptr; ///< We don't know what the data will be
+#endif
+ } impl;
#else
std::shared_timed_mutex impl;
+#endif
#endif
unsigned readers = 0;
unsigned writers = 0;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66313.215475.patch
Type: text/x-patch
Size: 2866 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190815/457d75d9/attachment.bin>
More information about the llvm-commits
mailing list