From 31f2ef7d322974d6d93150929f83c7d2fa9fa6be Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 7 Aug 2018 12:13:29 +0700 Subject: [PATCH 1/2] add some useful logging for the sentPacketHandler OnAlarm function --- internal/ackhandler/sent_packet_handler.go | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/internal/ackhandler/sent_packet_handler.go b/internal/ackhandler/sent_packet_handler.go index 1be318934..980b77e9a 100644 --- a/internal/ackhandler/sent_packet_handler.go +++ b/internal/ackhandler/sent_packet_handler.go @@ -378,27 +378,26 @@ func (h *sentPacketHandler) OnAlarm() error { var err error if h.packetHistory.HasOutstandingHandshakePackets() { if h.logger.Debug() { - h.logger.Debugf("Loss detection alarm fired in handshake mode") + h.logger.Debugf("Loss detection alarm fired in handshake mode. Handshake count: %d", h.handshakeCount) } h.handshakeCount++ err = h.queueHandshakePacketsForRetransmission() } else if !h.lossTime.IsZero() { if h.logger.Debug() { - h.logger.Debugf("Loss detection alarm fired in loss timer mode") + h.logger.Debugf("Loss detection alarm fired in loss timer mode. Loss time: %s", h.lossTime) } // Early retransmit or time loss detection err = h.detectLostPackets(now, h.bytesInFlight) - } else if h.tlpCount < maxTLPs { + } else if h.tlpCount < maxTLPs { // TLP if h.logger.Debug() { - h.logger.Debugf("Loss detection alarm fired in TLP mode") + h.logger.Debugf("Loss detection alarm fired in TLP mode. TLP count: %d", h.tlpCount) } h.allowTLP = true h.tlpCount++ - } else { + } else { // RTO if h.logger.Debug() { - h.logger.Debugf("Loss detection alarm fired in RTO mode") + h.logger.Debugf("Loss detection alarm fired in RTO mode. RTO count: %d", h.rtoCount) } - // RTO h.rtoCount++ h.numRTOs += 2 err = h.queueRTOs() From d95dc29d9064d726029760180135d6f8ca1cb547 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Tue, 7 Aug 2018 12:22:12 +0700 Subject: [PATCH 2/2] only set the largestSentBeforeRTO when sending the first RTO --- internal/ackhandler/sent_packet_handler.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/internal/ackhandler/sent_packet_handler.go b/internal/ackhandler/sent_packet_handler.go index 980b77e9a..f1c3fec87 100644 --- a/internal/ackhandler/sent_packet_handler.go +++ b/internal/ackhandler/sent_packet_handler.go @@ -398,6 +398,9 @@ func (h *sentPacketHandler) OnAlarm() error { if h.logger.Debug() { h.logger.Debugf("Loss detection alarm fired in RTO mode. RTO count: %d", h.rtoCount) } + if h.rtoCount == 0 { + h.largestSentBeforeRTO = h.lastSentPacketNumber + } h.rtoCount++ h.numRTOs += 2 err = h.queueRTOs() @@ -560,7 +563,6 @@ func (h *sentPacketHandler) ShouldSendNumPackets() int { // retransmit the oldest two packets func (h *sentPacketHandler) queueRTOs() error { - h.largestSentBeforeRTO = h.lastSentPacketNumber // Queue the first two outstanding packets for retransmission. // This does NOT declare this packets as lost: // They are still tracked in the packet history and count towards the bytes in flight.