Bug #1503 - Fix invalid iterators on erase operations on retry queue (thanks to Ghada Badawy).

This commit is contained in:
mirko
2013-03-15 14:28:56 +01:00
parent 949bd26ebc
commit 6a483a34d0

View File

@@ -588,13 +588,17 @@ BlockAckManager::CleanupBuffers (void)
else
{
/* remove retry packet iterator if it's present in retry queue */
for (std::list<PacketQueueI>::iterator it = m_retryPackets.begin (); it != m_retryPackets.end (); it++)
for (std::list<PacketQueueI>::iterator it = m_retryPackets.begin (); it != m_retryPackets.end ();)
{
if ((*it)->hdr.GetAddr1 () == j->second.first.GetPeer ()
&& (*it)->hdr.GetQosTid () == j->second.first.GetTid ()
&& (*it)->hdr.GetSequenceNumber () == i->hdr.GetSequenceNumber ())
{
m_retryPackets.erase (it);
it = m_retryPackets.erase (it);
}
else
{
it++;
}
}
}