diff options
| author | Dean Michael Berris <dberris@google.com> | 2017-03-27 07:13:35 +0000 |
|---|---|---|
| committer | Dean Michael Berris <dberris@google.com> | 2017-03-27 07:13:35 +0000 |
| commit | 1dcec254876341dc61747e16c061cbff30fbec8a (patch) | |
| tree | c59d2a9d008392462149fc735b633544432f4ccf /compiler-rt/lib/xray/xray_buffer_queue.h | |
| parent | d3ecc0db4405d3e7800e3e7389d5a30e729fc8e7 (diff) | |
| download | bcm5719-llvm-1dcec254876341dc61747e16c061cbff30fbec8a.tar.gz bcm5719-llvm-1dcec254876341dc61747e16c061cbff30fbec8a.zip | |
[XRay][compiler-rt] Use sanitizer_common's atomic ops
Instead of std::atomic APIs for atomic operations, we instead use APIs
include with sanitizer_common. This allows us to, at runtime, not have
to depend on potentially dynamically provided implementations of these
atomic operations.
Fixes http://llvm.org/PR32274.
llvm-svn: 298833
Diffstat (limited to 'compiler-rt/lib/xray/xray_buffer_queue.h')
| -rw-r--r-- | compiler-rt/lib/xray/xray_buffer_queue.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/compiler-rt/lib/xray/xray_buffer_queue.h b/compiler-rt/lib/xray/xray_buffer_queue.h index 32f7ae96726..28a62206920 100644 --- a/compiler-rt/lib/xray/xray_buffer_queue.h +++ b/compiler-rt/lib/xray/xray_buffer_queue.h @@ -15,10 +15,9 @@ #ifndef XRAY_BUFFER_QUEUE_H #define XRAY_BUFFER_QUEUE_H -#include <atomic> -#include <cstdint> +#include "sanitizer_common/sanitizer_atomic.h" +#include "sanitizer_common/sanitizer_mutex.h" #include <deque> -#include <mutex> #include <unordered_set> #include <utility> @@ -42,9 +41,9 @@ private: // We use a bool to indicate whether the Buffer has been used in this // freelist implementation. std::deque<std::tuple<Buffer, bool>> Buffers; - std::mutex Mutex; + __sanitizer::BlockingMutex Mutex; std::unordered_set<void *> OwnedBuffers; - std::atomic<bool> Finalizing; + __sanitizer::atomic_uint8_t Finalizing; public: enum class ErrorCode : unsigned { @@ -94,7 +93,10 @@ public: /// - ... ErrorCode releaseBuffer(Buffer &Buf); - bool finalizing() const { return Finalizing.load(std::memory_order_acquire); } + bool finalizing() const { + return __sanitizer::atomic_load(&Finalizing, + __sanitizer::memory_order_acquire); + } /// Sets the state of the BufferQueue to finalizing, which ensures that: /// @@ -109,7 +111,7 @@ public: /// Buffer is marked 'used' (i.e. has been the result of getBuffer(...) and a /// releaseBuffer(...) operation. template <class F> void apply(F Fn) { - std::lock_guard<std::mutex> G(Mutex); + __sanitizer::BlockingMutexLock G(&Mutex); for (const auto &T : Buffers) { if (std::get<1>(T)) Fn(std::get<0>(T)); |

