put STREAM frames back into the pool when they are acknowledged

This commit is contained in:
Marten Seemann
2019-09-04 20:36:45 +07:00
parent 4cfbb2f134
commit 4cb8bf3101
5 changed files with 15 additions and 8 deletions

View File

@@ -5,5 +5,5 @@ import "github.com/lucas-clemente/quic-go/internal/wire"
type Frame struct {
wire.Frame // nil if the frame has already been acknowledged in another packet
OnLost func(wire.Frame)
OnAcked func()
OnAcked func(wire.Frame)
}

View File

@@ -446,7 +446,7 @@ func (h *sentPacketHandler) onPacketAcked(p *Packet, rcvTime time.Time) error {
for _, f := range p.Frames {
if f.OnAcked != nil {
f.OnAcked()
f.OnAcked(f.Frame)
}
}
if p.includedInBytesInFlight {

View File

@@ -202,9 +202,14 @@ var _ = Describe("SentPacketHandler", func() {
It("calls the OnAcked callback", func() {
var acked bool
ping := &wire.PingFrame{}
handler.SentPacket(ackElicitingPacket(&Packet{
PacketNumber: 13,
Frames: []Frame{{Frame: &wire.PingFrame{}, OnAcked: func() { acked = true }}},
Frames: []Frame{{Frame: ping, OnAcked: func(f wire.Frame) {
Expect(f).To(Equal(ping))
acked = true
},
}},
}))
ack := &wire.AckFrame{AckRanges: []wire.AckRange{{Smallest: 13, Largest: 13}}}
Expect(handler.ReceivedAck(ack, 1, protocol.Encryption1RTT, time.Now())).To(Succeed())