Merge pull request #1524 from lucas-clemente/fix-ack-after-congestion-limited

don't try to send an ACK immediately after becoming congestion limited
This commit is contained in:
Marten Seemann
2018-09-25 22:55:43 -06:00
committed by GitHub
2 changed files with 10 additions and 0 deletions

View File

@@ -933,6 +933,12 @@ sendLoop:
case ackhandler.SendNone:
break sendLoop
case ackhandler.SendAck:
// If we already sent packets, and the send mode switches to SendAck,
// we've just become congestion limited.
// There's no need to try to send an ACK at this moment.
if numPacketsSent > 0 {
return nil
}
// We can at most send a single ACK only packet.
// There will only be a new ACK after receiving new packets.
// SendAck is only returned when we're congestion limited, so we don't need to set the pacingt timer.

View File

@@ -890,6 +890,10 @@ var _ = Describe("Session", func() {
sph.EXPECT().TimeUntilSend().Return(time.Now())
sph.EXPECT().SendMode().Return(ackhandler.SendAny)
sph.EXPECT().SendMode().Return(ackhandler.SendAck)
rph := mockackhandler.NewMockReceivedPacketHandler(mockCtrl)
rph.EXPECT().GetAlarmTimeout().Return(time.Now().Add(time.Hour)).Times(2)
rph.EXPECT().GetAckFrame()
sess.receivedPacketHandler = rph
done := make(chan struct{})
go func() {
defer GinkgoRecover()