Index: net/quic/quic_unacked_packet_map.cc |
diff --git a/net/quic/quic_unacked_packet_map.cc b/net/quic/quic_unacked_packet_map.cc |
index 194443bfadcf871068637040fbf229dec68de3a1..0ada9f62c521c8c5119eb8e6b082db2cb3a33058 100644 |
--- a/net/quic/quic_unacked_packet_map.cc |
+++ b/net/quic/quic_unacked_packet_map.cc |
@@ -300,6 +300,25 @@ void QuicUnackedPacketMap::RemoveFromInFlight( |
} |
} |
+void QuicUnackedPacketMap::StopRetransmissionForStream(QuicStreamId stream_id) { |
+ if (stream_id == kCryptoStreamId || stream_id == kHeadersStreamId) { |
+ LOG(DFATAL) << "Special streams must always retransmit data: " << stream_id; |
+ return; |
+ } |
+ QuicPacketSequenceNumber sequence_number = least_unacked_; |
+ for (UnackedPacketMap::const_iterator it = unacked_packets_.begin(); |
+ it != unacked_packets_.end(); ++it, ++sequence_number) { |
+ RetransmittableFrames* retransmittable_frames = it->retransmittable_frames; |
+ if (!retransmittable_frames) { |
+ continue; |
+ } |
+ retransmittable_frames->RemoveFramesForStream(stream_id); |
+ if (retransmittable_frames->frames().empty()) { |
+ RemoveRetransmittability(sequence_number); |
+ } |
+ } |
+} |
+ |
bool QuicUnackedPacketMap::HasUnackedPackets() const { |
return !unacked_packets_.empty(); |
} |