From 6a483a34d0e9c6928ca3fa800ab50b7c5fa03a11 Mon Sep 17 00:00:00 2001 From: mirko Date: Fri, 15 Mar 2013 14:28:56 +0100 Subject: [PATCH] Bug #1503 - Fix invalid iterators on erase operations on retry queue (thanks to Ghada Badawy). --- src/wifi/model/block-ack-manager.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/wifi/model/block-ack-manager.cc b/src/wifi/model/block-ack-manager.cc index aaf8874be..dbc26bde8 100644 --- a/src/wifi/model/block-ack-manager.cc +++ b/src/wifi/model/block-ack-manager.cc @@ -588,13 +588,17 @@ BlockAckManager::CleanupBuffers (void) else { /* remove retry packet iterator if it's present in retry queue */ - for (std::list::iterator it = m_retryPackets.begin (); it != m_retryPackets.end (); it++) + for (std::list::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++; } } }