garbage collect skippedPackets slice in SentPacketHandler

This commit is contained in:
Marten Seemann
2016-08-11 15:51:32 +07:00
committed by Lucas Clemente
parent 65838f34a8
commit e7d7207206
2 changed files with 35 additions and 0 deletions

View File

@@ -248,6 +248,8 @@ func (h *sentPacketHandler) ReceivedAck(ackFrame *frames.AckFrame, withPacketNum
}
}
h.garbageCollectSkippedPackets()
h.stopWaitingManager.ReceivedAck(ackFrame)
h.congestion.OnCongestionEvent(
@@ -345,3 +347,13 @@ func (h *sentPacketHandler) TimeOfFirstRTO() time.Time {
}
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:]
}

View File

@@ -186,6 +186,29 @@ var _ = Describe("SentPacketHandler", func() {
Expect(handler.skippedPackets[0]).To(Equal(protocol.PacketNumber(10)))
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())
})
})
})
})