Protect the access of thread flags under semaphore

This commit is contained in:
Jean Pierre Cimalando 2020-10-18 23:41:00 +02:00
parent 04fabd46d0
commit fcfcd5b8cc

View file

@ -464,9 +464,7 @@ bool is_ready(std::future<R> 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<SpinMutex> guard { garbageMutex };
for (auto& g: garbageToCollect)
g.reset();
while (semGarbageBarrier.wait(), garbageFlag) {
std::lock_guard<SpinMutex> guard { garbageMutex };
for (auto& g: garbageToCollect)
g.reset();
garbageToCollect.clear();
}
garbageToCollect.clear();
}
}