diff --git a/core/src/dsp/stream.h b/core/src/dsp/stream.h index ca021649..53560871 100644 --- a/core/src/dsp/stream.h +++ b/core/src/dsp/stream.h @@ -38,10 +38,7 @@ namespace dsp { swapCV.wait(lck, [this]{ return (canSwap || writerStop); }); // If writer was stopped, abandon operation - if (writerStop) { - writerStop = false; - return false; - } + if (writerStop) { return false; } // Swap buffers dataSize = size; @@ -66,23 +63,22 @@ namespace dsp { std::unique_lock lck(rdyMtx); rdyCV.wait(lck, [this]{ return (dataReady || readerStop); }); - // If stopped, abort - if (readerStop) { - readerStop = false; - return -1; - } - - dataReady = false; - - return dataSize; + return (readerStop ? -1 : dataSize); } void flush() { + // Clear data ready + { + std::lock_guard lck(rdyMtx); + dataReady = false; + } + // Notify writer that buffers can be swapped { std::lock_guard lck(swapMtx); canSwap = true; } + swapCV.notify_all(); }