forked from quic-go/quic-go
Merge pull request #2061 from lucas-clemente/fix-ack-delay-with-non-monotonic-clock
make sure that the ACK delay time is always a positive value
This commit is contained in:
@@ -174,7 +174,9 @@ func (h *receivedPacketTracker) GetAckFrame() *wire.AckFrame {
|
||||
|
||||
ack := &wire.AckFrame{
|
||||
AckRanges: h.packetHistory.GetAckRanges(),
|
||||
DelayTime: now.Sub(h.largestObservedReceivedTime),
|
||||
// Make sure that the DelayTime is always positive.
|
||||
// This is not guaranteed on systems that don't have a monotonic clock.
|
||||
DelayTime: utils.MaxDuration(0, now.Sub(h.largestObservedReceivedTime)),
|
||||
}
|
||||
|
||||
h.lastAck = ack
|
||||
|
||||
@@ -207,6 +207,13 @@ var _ = Describe("Received Packet Tracker", func() {
|
||||
Expect(ack.DelayTime).To(BeNumerically("~", 1337*time.Millisecond, 50*time.Millisecond))
|
||||
})
|
||||
|
||||
It("uses a 0 delay time if the delay would be negative", func() {
|
||||
tracker.ReceivedPacket(0, time.Now().Add(time.Hour), true)
|
||||
ack := tracker.GetAckFrame()
|
||||
Expect(ack).ToNot(BeNil())
|
||||
Expect(ack.DelayTime).To(BeZero())
|
||||
})
|
||||
|
||||
It("saves the last sent ACK", func() {
|
||||
tracker.ReceivedPacket(1, time.Time{}, true)
|
||||
ack := tracker.GetAckFrame()
|
||||
|
||||
Reference in New Issue
Block a user