From bf4aa2dce9d324baea5ff35a18192b8b1dd13984 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sat, 21 May 2016 19:19:41 +0700 Subject: [PATCH] remove closed streams from BlockedManager fixes #120 --- session.go | 3 +++ session_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/session.go b/session.go index d0da5a810..40d5f9337 100644 --- a/session.go +++ b/session.go @@ -605,6 +605,9 @@ func (s *Session) garbageCollectStreams() { if v == nil { continue } + if v.finishedWriting() { + s.blockedManager.RemoveBlockedStream(k) + } if v.finished() { s.streams[k] = nil } diff --git a/session_test.go b/session_test.go index b79e56fb4..ed2e5c896 100644 --- a/session_test.go +++ b/session_test.go @@ -185,6 +185,20 @@ var _ = Describe("Session", func() { Expect(session.streams[5]).To(BeNil()) }) + It("removes closed streams from BlockedManager", func() { + session.handleStreamFrame(&frames.StreamFrame{ + StreamID: 5, + Data: []byte{0xde, 0xca, 0xfb, 0xad}, + }) + Expect(session.streams[5]).ToNot(BeNil()) + session.blockedManager.AddBlockedStream(5, 4) + Expect(session.blockedManager.blockedStreams).To(HaveKey(protocol.StreamID(5))) + err := session.streams[5].Close() + Expect(err).ToNot(HaveOccurred()) + session.garbageCollectStreams() + Expect(session.blockedManager.blockedStreams).ToNot(HaveKey(protocol.StreamID(5))) + }) + It("closes empty streams with error", func() { testErr := errors.New("test") session.handleStreamFrame(&frames.StreamFrame{