From 835be342ca81d696cd30ed326704c3a7840d9ae3 Mon Sep 17 00:00:00 2001 From: Maxim Sharabayko Date: Tue, 9 Jun 2020 09:43:05 +0200 Subject: [PATCH] [core] Fixed CUnitQueue::getNextAvailUnit(..) Refers to issue #486 getting available uit to receive a packet --- srtcore/queue.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/srtcore/queue.cpp b/srtcore/queue.cpp index 2c80aee926..0da7b593f2 100644 --- a/srtcore/queue.cpp +++ b/srtcore/queue.cpp @@ -216,24 +216,21 @@ CUnit *CUnitQueue::getNextAvailUnit() if (m_iCount >= m_iSize) return NULL; - CQEntry *entrance = m_pCurrQueue; - + int units_checked = 0; do { - for (CUnit *sentinel = m_pCurrQueue->m_pUnit + m_pCurrQueue->m_iSize - 1; m_pAvailUnit != sentinel; - ++m_pAvailUnit) + const CUnit *end = m_pCurrQueue->m_pUnit + m_pCurrQueue->m_iSize; + for (; m_pAvailUnit != end; ++m_pAvailUnit, ++units_checked) + { if (m_pAvailUnit->m_iFlag == CUnit::FREE) + { return m_pAvailUnit; - - if (m_pCurrQueue->m_pUnit->m_iFlag == CUnit::FREE) - { - m_pAvailUnit = m_pCurrQueue->m_pUnit; - return m_pAvailUnit; + } } m_pCurrQueue = m_pCurrQueue->m_pNext; m_pAvailUnit = m_pCurrQueue->m_pUnit; - } while (m_pCurrQueue != entrance); + } while (units_checked < m_iSize); increase();