forked from quic-go/quic-go
Merge pull request #2117 from lucas-clemente/send-pooled-stream-frames
use the STREAM frame buffer for receiving stream data
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -17,7 +17,7 @@ func init() {
|
||||
}
|
||||
}
|
||||
|
||||
func getStreamFrame() *StreamFrame {
|
||||
func GetStreamFrame() *StreamFrame {
|
||||
f := pool.Get().(*StreamFrame)
|
||||
return f
|
||||
}
|
||||
|
||||
@@ -7,12 +7,12 @@ import (
|
||||
|
||||
var _ = Describe("Pool", func() {
|
||||
It("gets and puts STREAM frames", func() {
|
||||
f := getStreamFrame()
|
||||
f := GetStreamFrame()
|
||||
putStreamFrame(f)
|
||||
})
|
||||
|
||||
It("panics when putting a STREAM frame with a wrong capacity", func() {
|
||||
f := getStreamFrame()
|
||||
f := GetStreamFrame()
|
||||
f.Data = []byte("foobar")
|
||||
Expect(func() { putStreamFrame(f) }).To(Panic())
|
||||
})
|
||||
|
||||
@@ -59,7 +59,7 @@ func parseStreamFrame(r *bytes.Reader, version protocol.VersionNumber) (*StreamF
|
||||
if dataLen < protocol.MinStreamFrameBufferSize {
|
||||
frame = &StreamFrame{Data: make([]byte, dataLen)}
|
||||
} else {
|
||||
frame = getStreamFrame()
|
||||
frame = GetStreamFrame()
|
||||
// The STREAM frame can't be larger than the StreamFrame we obtained from the buffer,
|
||||
// since those StreamFrames have a buffer length of the maximum packet size.
|
||||
if dataLen > uint64(cap(frame.Data)) {
|
||||
@@ -167,7 +167,7 @@ func (f *StreamFrame) MaybeSplitOffFrame(maxSize protocol.ByteCount, version pro
|
||||
return nil, true
|
||||
}
|
||||
|
||||
new := getStreamFrame()
|
||||
new := GetStreamFrame()
|
||||
new.StreamID = f.StreamID
|
||||
new.Offset = f.Offset
|
||||
new.FinBit = false
|
||||
|
||||
Reference in New Issue
Block a user