From 6ee42396595feead2929e394cd940ade30487d94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Fr=C3=B6jdh?= Date: Mon, 5 Oct 2026 15:03:35 +0200 Subject: [PATCH] Fix/fifo race (#1591) (#1595) * fix race condition in Fifo::FreeAddress (cherry picked from commit dd5b2360d6f55b76eaf9cfdd0a940876bb5d0159) --- slsReceiverSoftware/src/Fifo.cpp | 5 ++++- slsReceiverSoftware/src/Fifo.h | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/slsReceiverSoftware/src/Fifo.cpp b/slsReceiverSoftware/src/Fifo.cpp index 1bec44e12..6740c8ae2 100644 --- a/slsReceiverSoftware/src/Fifo.cpp +++ b/slsReceiverSoftware/src/Fifo.cpp @@ -81,7 +81,10 @@ void Fifo::DestroyFifos() { fifoStream = nullptr; } -void Fifo::FreeAddress(char *&address) { fifoFree->push(address); } +void Fifo::FreeAddress(char *&address) { + std::lock_guard lock(fifoFreeMutex); + fifoFree->push(address); +} void Fifo::GetNewAddress(char *&address) { int temp = fifoFree->getDataValue(); diff --git a/slsReceiverSoftware/src/Fifo.h b/slsReceiverSoftware/src/Fifo.h index 729ce368b..fe9f3cf1e 100644 --- a/slsReceiverSoftware/src/Fifo.h +++ b/slsReceiverSoftware/src/Fifo.h @@ -16,6 +16,7 @@ #include "sls/sls_detector_defs.h" #include +#include namespace sls { @@ -52,6 +53,9 @@ class Fifo : private virtual slsDetectorDefs { int fifoDepth; std::atomic status_fifoBound; std::atomic status_fifoFree; + /** fifoFree has several producers, CircularFifo allows only one. + * Aligned to avoid false sharing with the members above */ + alignas(128) std::mutex fifoFreeMutex; }; } // namespace sls