diff --git a/src/internet/model/tcp-newreno.cc b/src/internet/model/tcp-newreno.cc --- a/src/internet/model/tcp-newreno.cc +++ b/src/internet/model/tcp-newreno.cc @@ -128,8 +128,13 @@ m_cWnd -= seq - m_txBuffer.HeadSequence (); m_cWnd += m_segmentSize; // increase cwnd NS_LOG_INFO ("Partial ACK in fast recovery: cwnd set to " << m_cWnd); + /* + * Patch by Morteza Kheirkhah (m.kheirkhah@sussex.ac.uk), University of Sussex, United Kingdom. + * Personal webpage: http://www.uclmail.net/users/m.kheirkhah/ + */ + m_txBuffer.DiscardUpTo(seq); // Discard data up to but not including this sequence number. + DoRetransmit (); // Assume the next seq is lost. Retransmit lost packet TcpSocketBase::NewAck (seq); // update m_nextTxSequence and send new data if allowed by window - DoRetransmit (); // Assume the next seq is lost. Retransmit lost packet return; } else if (m_inFastRec && seq >= m_recover)