forked from quic-go/quic-go
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:
@@ -933,6 +933,12 @@ sendLoop:
|
|||||||
case ackhandler.SendNone:
|
case ackhandler.SendNone:
|
||||||
break sendLoop
|
break sendLoop
|
||||||
case ackhandler.SendAck:
|
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.
|
// We can at most send a single ACK only packet.
|
||||||
// There will only be a new ACK after receiving new packets.
|
// 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.
|
// SendAck is only returned when we're congestion limited, so we don't need to set the pacingt timer.
|
||||||
|
|||||||
@@ -890,6 +890,10 @@ var _ = Describe("Session", func() {
|
|||||||
sph.EXPECT().TimeUntilSend().Return(time.Now())
|
sph.EXPECT().TimeUntilSend().Return(time.Now())
|
||||||
sph.EXPECT().SendMode().Return(ackhandler.SendAny)
|
sph.EXPECT().SendMode().Return(ackhandler.SendAny)
|
||||||
sph.EXPECT().SendMode().Return(ackhandler.SendAck)
|
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{})
|
done := make(chan struct{})
|
||||||
go func() {
|
go func() {
|
||||||
defer GinkgoRecover()
|
defer GinkgoRecover()
|
||||||
|
|||||||
Reference in New Issue
Block a user