forked from quic-go/quic-go
fix StreamFrameQueue when deleting multiple streams with queued prio frames
This commit is contained in:
@@ -127,6 +127,9 @@ func (q *streamFrameQueue) RemoveStream(streamID protocol.StreamID) {
|
|||||||
defer q.mutex.Unlock()
|
defer q.mutex.Unlock()
|
||||||
|
|
||||||
for i, frame := range q.prioFrames {
|
for i, frame := range q.prioFrames {
|
||||||
|
if frame == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if frame.StreamID == streamID {
|
if frame.StreamID == streamID {
|
||||||
q.byteLen -= frame.DataLen()
|
q.byteLen -= frame.DataLen()
|
||||||
q.len--
|
q.len--
|
||||||
|
|||||||
@@ -395,6 +395,16 @@ var _ = Describe("streamFrameQueue", func() {
|
|||||||
Expect(frame).To(BeNil())
|
Expect(frame).To(BeNil())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("deletes multiple prioFrames from different streams", func() {
|
||||||
|
queue.Push(prioFrame1, true)
|
||||||
|
queue.Push(prioFrame2, true)
|
||||||
|
queue.RemoveStream(prioFrame1.StreamID)
|
||||||
|
queue.RemoveStream(prioFrame2.StreamID)
|
||||||
|
frame, err := queue.Pop(1000)
|
||||||
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
Expect(frame).To(BeNil())
|
||||||
|
})
|
||||||
|
|
||||||
It("deletes the map entry", func() {
|
It("deletes the map entry", func() {
|
||||||
queue.Push(frame1, false)
|
queue.Push(frame1, false)
|
||||||
queue.Push(frame2, false)
|
queue.Push(frame2, false)
|
||||||
|
|||||||
Reference in New Issue
Block a user