View | Details | Raw Unified | Return to bug 829
Collapse All | Expand All

(-)a/src/internet-stack/pending-data.cc (+1 lines)
 Lines 102-107    Link Here 
102
{
102
{
103
  data.push_back(p);
103
  data.push_back(p);
104
  size += p->GetSize();
104
  size += p->GetSize();
105
  //std::cout << this << ": pending data size: " << size << " (" << int(data.size ()) << " packets)" << std::endl;
105
}
106
}
106
107
107
uint32_t PendingData::SizeFromSeq (const SequenceNumber& f, const SequenceNumber& o)
108
uint32_t PendingData::SizeFromSeq (const SequenceNumber& f, const SequenceNumber& o)
(-)a/src/internet-stack/tcp-socket-impl.cc (-1 / +29 lines)
 Lines 1387-1393    Link Here 
1387
    }
1387
    }
1388
  // See if all pending ack'ed; if so we can delete the data
1388
  // See if all pending ack'ed; if so we can delete the data
1389
  if (m_pendingData)
1389
  if (m_pendingData)
1390
    { // Data exists, see if can be deleted
1390
    { // Data exists, see if can be entirely deleted
1391
      if (m_pendingData->SizeFromSeq (m_firstPendingSequence, m_highestRxAck) == 0)
1391
      if (m_pendingData->SizeFromSeq (m_firstPendingSequence, m_highestRxAck) == 0)
1392
        { // All pending acked, can be deleted
1392
        { // All pending acked, can be deleted
1393
          m_pendingData->Clear ();
1393
          m_pendingData->Clear ();
 Lines 1399-1404    Link Here 
1399
                        Simulator::GetDelayLeft (m_retxEvent)).GetSeconds());
1399
                        Simulator::GetDelayLeft (m_retxEvent)).GetSeconds());
1400
          m_retxEvent.Cancel ();
1400
          m_retxEvent.Cancel ();
1401
        }
1401
        }
1402
      else // else delete just a portion
1403
        {
1404
          // std::cout << "begin delete portion of pending data;"
1405
          //           << " m_firstPendingSequence=" << m_firstPendingSequence
1406
          //           << "; m_highestRxAck=" << m_highestRxAck
1407
          //           << "; size=" << m_pendingData->size << std::endl;
1408
          
1409
          for (std::vector< Ptr<Packet> >::iterator dataI = m_pendingData->data.begin ();
1410
               dataI != m_pendingData->data.end ();)
1411
            {
1412
              Ptr<Packet> data = *dataI;
1413
              // std::cout << "pending packet of size " << data->GetSize () << std::endl;
1414
              if (m_firstPendingSequence + SequenceNumber (data->GetSize ()) <= m_highestRxAck)
1415
                {
1416
                  dataI = m_pendingData->data.erase (dataI);
1417
                  m_pendingData->size -= data->GetSize ();
1418
                  m_firstPendingSequence += data->GetSize ();
1419
                }
1420
              else
1421
                {
1422
                  break;
1423
                }
1424
            }
1425
          // std::cout << "  end delete portion of pending data;"
1426
          //           << " m_firstPendingSequence=" << m_firstPendingSequence
1427
          //           << "; m_highestRxAck=" << m_highestRxAck
1428
          //           << "; size=" << m_pendingData->size << std::endl;
1429
        }
1402
    }
1430
    }
1403
  // Try to send more data
1431
  // Try to send more data
1404
  SendPendingData (m_connected);
1432
  SendPendingData (m_connected);

Return to bug 829