diff --git a/srtcore/queue.cpp b/srtcore/queue.cpp index 2c80aee92..0da7b593f 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();