cleanup out of sequence packet nums in one call

This commit is contained in:
orignal 2023-02-02 13:52:48 -05:00
parent f7101cc260
commit 02e7f6b0c3

View file

@ -2757,16 +2757,26 @@ namespace transport
if (packetNum <= m_ReceivePacketNum) return false; // duplicate if (packetNum <= m_ReceivePacketNum) return false; // duplicate
if (packetNum == m_ReceivePacketNum + 1) if (packetNum == m_ReceivePacketNum + 1)
{ {
for (auto it = m_OutOfSequencePackets.begin (); it != m_OutOfSequencePackets.end ();) if (!m_OutOfSequencePackets.empty ())
{
auto it = m_OutOfSequencePackets.begin ();
if (*it == packetNum + 1)
{
// first out of sequence packet is in sequence now
packetNum++; it++;
while (it != m_OutOfSequencePackets.end ())
{ {
if (*it == packetNum + 1) if (*it == packetNum + 1)
{ {
packetNum++; packetNum++;
it = m_OutOfSequencePackets.erase (it); it++;
} }
else else // next out of sequence
break; break;
} }
m_OutOfSequencePackets.erase (m_OutOfSequencePackets.begin (), it);
}
}
m_ReceivePacketNum = packetNum; m_ReceivePacketNum = packetNum;
} }
else else
@ -2852,7 +2862,7 @@ namespace transport
if (!m_OutOfSequencePackets.empty ()) if (!m_OutOfSequencePackets.empty ())
{ {
int ranges = 0; int ranges = 0;
while (ranges < SSU2_MAX_NUM_ACK_RANGES && !m_OutOfSequencePackets.empty () && while (ranges < 8 && !m_OutOfSequencePackets.empty () &&
(m_OutOfSequencePackets.size () > 2*SSU2_MAX_NUM_ACK_RANGES || (m_OutOfSequencePackets.size () > 2*SSU2_MAX_NUM_ACK_RANGES ||
*m_OutOfSequencePackets.rbegin () > m_ReceivePacketNum + 255*8)) *m_OutOfSequencePackets.rbegin () > m_ReceivePacketNum + 255*8))
{ {