From dd30a026278444a27af48e033e96888c18367357 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Fri, 30 Dec 2022 18:35:05 +1300 Subject: [PATCH] ackhandler: remove the packet list element from the correct list --- internal/ackhandler/sent_packet_history.go | 8 ++------ internal/utils/linkedlist/linkedlist.go | 4 ++++ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/ackhandler/sent_packet_history.go b/internal/ackhandler/sent_packet_history.go index 7e569f956..e9c1de1de 100644 --- a/internal/ackhandler/sent_packet_history.go +++ b/internal/ackhandler/sent_packet_history.go @@ -108,8 +108,7 @@ func (h *sentPacketHistory) Remove(p protocol.PacketNumber) error { if !ok { return fmt.Errorf("packet %d not found in sent packet history", p) } - h.outstandingPacketList.Remove(el) - h.etcPacketList.Remove(el) + el.List().Remove(el) delete(h.packetMap, p) return nil } @@ -139,10 +138,7 @@ func (h *sentPacketHistory) DeclareLost(p *Packet) *Packet { if !ok { return nil } - // try to remove it from both lists, as we don't know which one it currently belongs to. - // Remove is a no-op for elements that are not in the list. - h.outstandingPacketList.Remove(el) - h.etcPacketList.Remove(el) + el.List().Remove(el) p.declaredLost = true // move it to the correct position in the etc list (based on the packet number) for el = h.etcPacketList.Back(); el != nil; el = el.Prev() { diff --git a/internal/utils/linkedlist/linkedlist.go b/internal/utils/linkedlist/linkedlist.go index 217b21efb..c140cfcb5 100644 --- a/internal/utils/linkedlist/linkedlist.go +++ b/internal/utils/linkedlist/linkedlist.go @@ -43,6 +43,10 @@ func (e *Element[T]) Prev() *Element[T] { return nil } +func (e *Element[T]) List() *List[T] { + return e.list +} + // List represents a doubly linked list. // The zero value for List is an empty list ready to use. type List[T any] struct {