@@ -196,12 +196,22 @@ class MQOutputStorage : public OutputStorage<ElementType> {
196196 const uint64_t readPos = currentState.read .fetch_add (1 , std::memory_order_acq_rel);
197197 if (readPos >= m_buffersSize) {
198198 const uint64_t readPosOfWriteBuffer = readPos - m_buffersSize;
199+ if (m_writerFinished.load (std::memory_order_acquire)) {
200+ if (readPosOfWriteBuffer
201+ < currentState.written .load (std::memory_order_acquire)) {
202+ return ¤tState.writeBuffer [readPosOfWriteBuffer].getData ();
203+ }
204+ return nullptr ;
205+ }
206+ currentState.read .fetch_sub (1 , std::memory_order_acq_rel);
207+ return nullptr ;
208+ /* const uint64_t readPosOfWriteBuffer = readPos - m_buffersSize;
199209 if (m_writerFinished.load(std::memory_order_acquire)
200210 && readPosOfWriteBuffer < currentState.written.load(std::memory_order_acquire))
201211 [[unlikely]] {
202212 return ¤tState.writeBuffer[readPosOfWriteBuffer].getData();
203213 }
204- return nullptr ;
214+ return nullptr;*/
205215 }
206216 // ElementType* res = currentState.readBuffer[readPos];
207217 return ¤tState.readBuffer [readPos].getData ();
@@ -221,10 +231,14 @@ class MQOutputStorage : public OutputStorage<ElementType> {
221231
222232 bool finished () const noexcept
223233 {
224- // const State& currentState = m_stateBuffer.getCurrentValue();
234+ const State& currentState = m_stateBuffer.getCurrentValue ();
225235 return m_writerFinished.load (std::memory_order_acquire)
236+ && currentState.read .load (std::memory_order_acquire)
237+ >= m_buffersSize + currentState.written .load (std::memory_order_acquire);
238+ // const State& currentState = m_stateBuffer.getCurrentValue();
239+ /* return m_writerFinished.load(std::memory_order_acquire)
226240 && m_stateBuffer.getCurrentValue().read.load(std::memory_order_acquire)
227- >= 2 * m_buffersSize;
241+ >= 2 * m_buffersSize;*/
228242 /* && std::ranges::all_of(
229243 m_stateBuffer.getCurrentValue().,
230244 [&](const CacheAlligned<std::atomic<uint64_t>>& readPos) {
0 commit comments