fix StreamFrameQueue when deleting multiple streams with queued prio frames

This commit is contained in:
Marten Seemann
2016-06-10 20:14:52 +07:00
parent 1c1101de0e
commit c063fb1dd3
2 changed files with 13 additions and 0 deletions

View File

@@ -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--

View File

@@ -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)