forked from quic-go/quic-go
ackhandler: immediately clear ackedPacket slice after processing ACK (#5313)
* ackhandler: immediately clear ackedPacket slice after processing ACK * ackhandler: add defensive check for empty ackedPackets slice
This commit is contained in:
@@ -406,7 +406,9 @@ func (h *sentPacketHandler) ReceivedAck(ack *wire.AckFrame, encLevel protocol.En
|
|||||||
}
|
}
|
||||||
// After this point, we must not use ackedPackets any longer!
|
// After this point, we must not use ackedPackets any longer!
|
||||||
// We've already returned the buffers.
|
// We've already returned the buffers.
|
||||||
ackedPackets = nil //nolint:ineffassign // This is just to be on the safe side.
|
ackedPackets = nil //nolint:ineffassign // This is just to be on the safe side.
|
||||||
|
clear(h.ackedPackets) // make sure the memory is released
|
||||||
|
h.ackedPackets = h.ackedPackets[:0]
|
||||||
|
|
||||||
// Reset the pto_count unless the client is unsure if the server has validated the client's address.
|
// Reset the pto_count unless the client is unsure if the server has validated the client's address.
|
||||||
if h.peerCompletedAddressValidation {
|
if h.peerCompletedAddressValidation {
|
||||||
@@ -432,8 +434,10 @@ func (h *sentPacketHandler) GetLowestPacketNotConfirmedAcked() protocol.PacketNu
|
|||||||
// Packets are returned in ascending packet number order.
|
// Packets are returned in ascending packet number order.
|
||||||
func (h *sentPacketHandler) detectAndRemoveAckedPackets(ack *wire.AckFrame, encLevel protocol.EncryptionLevel) ([]*packet, error) {
|
func (h *sentPacketHandler) detectAndRemoveAckedPackets(ack *wire.AckFrame, encLevel protocol.EncryptionLevel) ([]*packet, error) {
|
||||||
pnSpace := h.getPacketNumberSpace(encLevel)
|
pnSpace := h.getPacketNumberSpace(encLevel)
|
||||||
h.ackedPackets = h.ackedPackets[:0]
|
|
||||||
ackRangeIndex := 0
|
ackRangeIndex := 0
|
||||||
|
if len(h.ackedPackets) > 0 {
|
||||||
|
return nil, errors.New("ackhandler BUG: ackedPackets slice not empty")
|
||||||
|
}
|
||||||
lowestAcked := ack.LowestAcked()
|
lowestAcked := ack.LowestAcked()
|
||||||
largestAcked := ack.LargestAcked()
|
largestAcked := ack.LargestAcked()
|
||||||
for p := range pnSpace.history.Packets() {
|
for p := range pnSpace.history.Packets() {
|
||||||
|
|||||||
Reference in New Issue
Block a user