diff --git a/stream_frame_queue.go b/stream_frame_queue.go index ca9d8241..80a7d10d 100644 --- a/stream_frame_queue.go +++ b/stream_frame_queue.go @@ -127,6 +127,9 @@ func (q *streamFrameQueue) RemoveStream(streamID protocol.StreamID) { defer q.mutex.Unlock() for i, frame := range q.prioFrames { + if frame == nil { + continue + } if frame.StreamID == streamID { q.byteLen -= frame.DataLen() q.len-- diff --git a/stream_frame_queue_test.go b/stream_frame_queue_test.go index 96aa7c87..0b651060 100644 --- a/stream_frame_queue_test.go +++ b/stream_frame_queue_test.go @@ -395,6 +395,16 @@ var _ = Describe("streamFrameQueue", func() { 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() { queue.Push(frame1, false) queue.Push(frame2, false)