forked from quic-go/quic-go
garbage collect skippedPackets slice in SentPacketHandler
This commit is contained in:
committed by
Lucas Clemente
parent
65838f34a8
commit
e7d7207206
@@ -248,6 +248,8 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *frames.AckFrame, withPacketNum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
h.garbageCollectSkippedPackets()
|
||||||
|
|
||||||
h.stopWaitingManager.ReceivedAck(ackFrame)
|
h.stopWaitingManager.ReceivedAck(ackFrame)
|
||||||
|
|
||||||
h.congestion.OnCongestionEvent(
|
h.congestion.OnCongestionEvent(
|
||||||
@@ -345,3 +347,13 @@ func (h *sentPacketHandler) TimeOfFirstRTO() time.Time {
|
|||||||
}
|
}
|
||||||
return h.lastSentPacketTime.Add(h.getRTO())
|
return h.lastSentPacketTime.Add(h.getRTO())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h *sentPacketHandler) garbageCollectSkippedPackets() {
|
||||||
|
deleteIndex := 0
|
||||||
|
for i, p := range h.skippedPackets {
|
||||||
|
if p <= h.LargestInOrderAcked {
|
||||||
|
deleteIndex = i + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
h.skippedPackets = h.skippedPackets[deleteIndex:]
|
||||||
|
}
|
||||||
|
|||||||
@@ -186,6 +186,29 @@ var _ = Describe("SentPacketHandler", func() {
|
|||||||
Expect(handler.skippedPackets[0]).To(Equal(protocol.PacketNumber(10)))
|
Expect(handler.skippedPackets[0]).To(Equal(protocol.PacketNumber(10)))
|
||||||
Expect(handler.skippedPackets[protocol.MaxTrackedSkippedPackets-1]).To(Equal(protocol.PacketNumber(10 + 2*(protocol.MaxTrackedSkippedPackets-1))))
|
Expect(handler.skippedPackets[protocol.MaxTrackedSkippedPackets-1]).To(Equal(protocol.PacketNumber(10 + 2*(protocol.MaxTrackedSkippedPackets-1))))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("garbage collection", func() {
|
||||||
|
It("keeps all packet numbers above the LargestInOrderAcked", func() {
|
||||||
|
handler.skippedPackets = []protocol.PacketNumber{2, 5, 8, 10}
|
||||||
|
handler.LargestInOrderAcked = 1
|
||||||
|
handler.garbageCollectSkippedPackets()
|
||||||
|
Expect(handler.skippedPackets).To(Equal([]protocol.PacketNumber{2, 5, 8, 10}))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("doesn't keep packet numbers below the LargestInOrderAcked", func() {
|
||||||
|
handler.skippedPackets = []protocol.PacketNumber{1, 5, 8, 10}
|
||||||
|
handler.LargestInOrderAcked = 5
|
||||||
|
handler.garbageCollectSkippedPackets()
|
||||||
|
Expect(handler.skippedPackets).To(Equal([]protocol.PacketNumber{8, 10}))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("deletes all packet numbers if LargestInOrderAcked is sufficiently high", func() {
|
||||||
|
handler.skippedPackets = []protocol.PacketNumber{1, 5, 10}
|
||||||
|
handler.LargestInOrderAcked = 15
|
||||||
|
handler.garbageCollectSkippedPackets()
|
||||||
|
Expect(handler.skippedPackets).To(BeEmpty())
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user