Index: net/tools/quic/test_tools/packet_dropping_test_writer.cc |
diff --git a/net/tools/quic/test_tools/packet_dropping_test_writer.cc b/net/tools/quic/test_tools/packet_dropping_test_writer.cc |
index 61e80bc8fdd51d8e529a3d6df9eaf671bfa1b9c6..11aafb694954b25ccdae8690cb23d1287e003bbf 100644 |
--- a/net/tools/quic/test_tools/packet_dropping_test_writer.cc |
+++ b/net/tools/quic/test_tools/packet_dropping_test_writer.cc |
@@ -41,7 +41,7 @@ class DelayAlarm : public QuicAlarm::Delegate { |
: writer_(writer) { } |
virtual QuicTime OnAlarm() OVERRIDE { |
- return writer_->ReleaseNextPacket(); |
+ return writer_->ReleaseOldPackets(); |
} |
private: |
@@ -80,6 +80,8 @@ WriteResult PacketDroppingTestWriter::WritePacket( |
const net::IPAddressNumber& self_address, |
const net::IPEndPoint& peer_address, |
QuicBlockedWriterInterface* blocked_writer) { |
+ ReleaseOldPackets(); |
+ |
base::AutoLock locked(config_mutex_); |
if (fake_packet_loss_percentage_ > 0 && |
simple_random_.RandUint64() % 100 < |
@@ -171,6 +173,17 @@ QuicTime PacketDroppingTestWriter::ReleaseNextPacket() { |
return delayed_packets_.begin()->send_time; |
} |
+QuicTime PacketDroppingTestWriter::ReleaseOldPackets() { |
+ while (!delayed_packets_.empty()) { |
+ QuicTime next_send_time = delayed_packets_.front().send_time; |
+ if (next_send_time > clock_->Now()) { |
+ return next_send_time; |
+ } |
+ ReleaseNextPacket(); |
+ } |
+ return QuicTime::Zero(); |
+} |
+ |
PacketDroppingTestWriter::DelayedWrite::DelayedWrite( |
const char* buffer, |
size_t buf_len, |