From 2fd5cc056c1b945fd42bb9878c90e23262a08f82 Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Tue, 15 Sep 2020 16:34:34 -0400 Subject: [PATCH] Adds std::atomic_thread_fences, but these seem not to be a magic bullet. --- Outputs/ScanTargets/BufferingScanTarget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Outputs/ScanTargets/BufferingScanTarget.cpp b/Outputs/ScanTargets/BufferingScanTarget.cpp index ac3857a4c..9443b9b02 100644 --- a/Outputs/ScanTargets/BufferingScanTarget.cpp +++ b/Outputs/ScanTargets/BufferingScanTarget.cpp @@ -242,6 +242,7 @@ void BufferingScanTarget::announce(Event event, bool is_visible, const Outputs:: write_pointers_.line = uint16_t((write_pointers_.line + 1) % line_buffer_size_); // Update the submit pointers with all lines, scans and data written during this line. + std::atomic_thread_fence(std::memory_order::memory_order_release); submit_pointers_.store(write_pointers_, std::memory_order::memory_order_release); } else { // Something failed, or there was nothing on the line anyway, so reset all pointers to where they @@ -299,6 +300,7 @@ BufferingScanTarget::OutputArea BufferingScanTarget::get_output_area() { // cleared for submission. const auto submit_pointers = submit_pointers_.load(std::memory_order::memory_order_acquire); const auto read_ahead_pointers = read_ahead_pointers_.load(std::memory_order::memory_order_relaxed); + std::atomic_thread_fence(std::memory_order::memory_order_acquire); OutputArea area;