Merge pull request #507 from jpcima/race-conditions

Protect the access of thread flags under semaphore
This commit is contained in:
JP Cimalando 2020-10-19 00:07:20 +02:00 committed by GitHub
commit df200b84c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -464,9 +464,7 @@ bool is_ready(std::future<R> const& f)
void sfz::FilePool::dispatchingJob() noexcept void sfz::FilePool::dispatchingJob() noexcept
{ {
QueuedFileData queuedData; QueuedFileData queuedData;
while (dispatchFlag) { while (dispatchBarrier.wait(), dispatchFlag) {
dispatchBarrier.wait();
if (emptyQueueFlag) { if (emptyQueueFlag) {
while (filesToLoad.try_pop(queuedData)) { while (filesToLoad.try_pop(queuedData)) {
// pass // pass
@ -492,15 +490,12 @@ void sfz::FilePool::dispatchingJob() noexcept
void sfz::FilePool::garbageJob() noexcept void sfz::FilePool::garbageJob() noexcept
{ {
while (garbageFlag) { while (semGarbageBarrier.wait(), garbageFlag) {
semGarbageBarrier.wait(); std::lock_guard<SpinMutex> guard { garbageMutex };
{ for (auto& g: garbageToCollect)
std::lock_guard<SpinMutex> guard { garbageMutex }; g.reset();
for (auto& g: garbageToCollect)
g.reset();
garbageToCollect.clear(); garbageToCollect.clear();
}
} }
} }