From 2ceb320ea35a14ef8f6df460314f85a40a7581de Mon Sep 17 00:00:00 2001 From: Tianyu Jiang Date: Mon, 17 Dec 2018 12:58:34 -0800 Subject: 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 --- libs/ui/BufferHubBuffer.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'libs/ui/BufferHubBuffer.cpp') diff --git a/libs/ui/BufferHubBuffer.cpp b/libs/ui/BufferHubBuffer.cpp index 226b6ee9ad..0582e1afe7 100644 --- a/libs/ui/BufferHubBuffer.cpp +++ b/libs/ui/BufferHubBuffer.cpp @@ -169,6 +169,13 @@ int BufferHubBuffer::ImportGraphicBuffer() { buffer_state_ = &metadata_header->buffer_state; fence_state_ = &metadata_header->fence_state; active_clients_bit_mask_ = &metadata_header->active_clients_bit_mask; + // 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."); // Import the buffer: We only need to hold on the native_handle_t here so that // GraphicBuffer instance can be created in future. -- cgit v1.2.3-59-g8ed1b