From fcfcd5b8cc2ae55a376827a6acb044af781463f7 Mon Sep 17 00:00:00 2001 From: Jean Pierre Cimalando Date: Sun, 18 Oct 2020 23:41:00 +0200 Subject: [PATCH] Protect the access of thread flags under semaphore --- src/sfizz/FilePool.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/sfizz/FilePool.cpp b/src/sfizz/FilePool.cpp index 6c9a5e5d..115198cd 100644 --- a/src/sfizz/FilePool.cpp +++ b/src/sfizz/FilePool.cpp @@ -464,9 +464,7 @@ bool is_ready(std::future const& f) void sfz::FilePool::dispatchingJob() noexcept { QueuedFileData queuedData; - while (dispatchFlag) { - dispatchBarrier.wait(); - + while (dispatchBarrier.wait(), dispatchFlag) { if (emptyQueueFlag) { while (filesToLoad.try_pop(queuedData)) { // pass @@ -492,15 +490,12 @@ void sfz::FilePool::dispatchingJob() noexcept void sfz::FilePool::garbageJob() noexcept { - while (garbageFlag) { - semGarbageBarrier.wait(); - { - std::lock_guard guard { garbageMutex }; - for (auto& g: garbageToCollect) - g.reset(); + while (semGarbageBarrier.wait(), garbageFlag) { + std::lock_guard guard { garbageMutex }; + for (auto& g: garbageToCollect) + g.reset(); - garbageToCollect.clear(); - } + garbageToCollect.clear(); } }