From 741a1aa211eb23093851a3267599d7f011e3fa52 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 5 May 2020 16:28:25 +0700 Subject: [PATCH] reset the PTO when dropping a packet number space --- internal/ackhandler/sent_packet_handler.go | 1 + internal/ackhandler/sent_packet_handler_test.go | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/internal/ackhandler/sent_packet_handler.go b/internal/ackhandler/sent_packet_handler.go index 7e7a1a10c..d69f22a25 100644 --- a/internal/ackhandler/sent_packet_handler.go +++ b/internal/ackhandler/sent_packet_handler.go @@ -164,6 +164,7 @@ func (h *sentPacketHandler) dropPackets(encLevel protocol.EncryptionLevel) { h.qlogger.UpdatedPTOCount(0) } h.ptoCount = 0 + h.numProbesToSend = 0 h.ptoMode = SendNone } diff --git a/internal/ackhandler/sent_packet_handler_test.go b/internal/ackhandler/sent_packet_handler_test.go index bdff4896a..31e050f39 100644 --- a/internal/ackhandler/sent_packet_handler_test.go +++ b/internal/ackhandler/sent_packet_handler_test.go @@ -966,6 +966,19 @@ var _ = Describe("SentPacketHandler", func() { Expect(lostPackets).To(Equal([]protocol.PacketNumber{0, 1, 2, 3, 4, 5})) Expect(handler.bytesInFlight).To(Equal(protocol.ByteCount(6))) }) + + It("cancels the PTO when dropping a packet number space", func() { + now := time.Now() + handler.SentPacket(handshakePacket(&Packet{PacketNumber: 1, SendTime: now.Add(-time.Minute)})) + handler.SentPacket(handshakePacket(&Packet{PacketNumber: 2, SendTime: now.Add(-time.Minute)})) + Expect(handler.GetLossDetectionTimeout()).To(BeTemporally("~", now.Add(-time.Minute), time.Second)) + Expect(handler.OnLossDetectionTimeout()).To(Succeed()) + Expect(handler.SendMode()).To(Equal(SendPTOHandshake)) + Expect(handler.ptoCount).To(BeEquivalentTo(1)) + handler.DropPackets(protocol.EncryptionHandshake) + Expect(handler.ptoCount).To(BeZero()) + Expect(handler.SendMode()).To(Equal(SendAny)) + }) }) Context("peeking and popping packet number", func() {