diff options
author | 2018-12-17 12:58:34 -0800 | |
---|---|---|
committer | 2018-12-17 12:58:34 -0800 | |
commit | 2ceb320ea35a14ef8f6df460314f85a40a7581de (patch) | |
tree | 8fbc201e92640ad93fc8617a93c6214de54f6d90 /services/bufferhub/BufferNode.cpp | |
parent | 49c55bb850f814cd7032ca815201a597a74cca40 (diff) |
Check atomics in shared memory are lock free
when they are created in bufferhub server side in BufferNode, and client
side in BufferHubBuffer.
Fix: 117849512
Test: BufferHub_test BufferHubServer_test
Change-Id: Ifc5b681a6a86fa02cb598b33bf68dfefc07a76f9
Diffstat (limited to 'services/bufferhub/BufferNode.cpp')
-rw-r--r-- | services/bufferhub/BufferNode.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/services/bufferhub/BufferNode.cpp b/services/bufferhub/BufferNode.cpp index cc87e15917..da19a6fb1d 100644 --- a/services/bufferhub/BufferNode.cpp +++ b/services/bufferhub/BufferNode.cpp @@ -2,6 +2,7 @@ #include <bufferhub/BufferHubService.h> #include <bufferhub/BufferNode.h> +#include <log/log.h> #include <ui/GraphicBufferAllocator.h> namespace android { @@ -18,6 +19,13 @@ void BufferNode::InitializeMetadata() { fence_state_ = new (&metadata_header->fence_state) std::atomic<uint32_t>(0); active_clients_bit_mask_ = new (&metadata_header->active_clients_bit_mask) std::atomic<uint32_t>(0); + // The C++ standard recommends (but does not require) that lock-free atomic operations are + // also address-free, that is, suitable for communication between processes using shared + // memory. + LOG_ALWAYS_FATAL_IF(!std::atomic_is_lock_free(buffer_state_) || + !std::atomic_is_lock_free(fence_state_) || + !std::atomic_is_lock_free(active_clients_bit_mask_), + "Atomic variables in ashmen are not lock free."); } // Allocates a new BufferNode. |