forked from quic-go/quic-go
@@ -624,6 +624,9 @@ func (s *Session) garbageCollectStreams() {
|
|||||||
if v.finishedWriting() {
|
if v.finishedWriting() {
|
||||||
s.blockedManager.RemoveBlockedStream(k)
|
s.blockedManager.RemoveBlockedStream(k)
|
||||||
}
|
}
|
||||||
|
if v.finishedReading() {
|
||||||
|
s.windowUpdateManager.RemoveStream(k)
|
||||||
|
}
|
||||||
if v.finished() {
|
if v.finished() {
|
||||||
s.streams[k] = nil
|
s.streams[k] = nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,6 +201,17 @@ var _ = Describe("Session", func() {
|
|||||||
Expect(session.blockedManager.blockedStreams).ToNot(HaveKey(protocol.StreamID(5)))
|
Expect(session.blockedManager.blockedStreams).ToNot(HaveKey(protocol.StreamID(5)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("removes closed streams from WindowUpdateManager", func() {
|
||||||
|
session.handleStreamFrame(&frames.StreamFrame{
|
||||||
|
StreamID: 5,
|
||||||
|
Data: []byte{0xde, 0xca, 0xfb, 0xad},
|
||||||
|
})
|
||||||
|
session.updateReceiveFlowControlWindow(5, 0x1337)
|
||||||
|
session.streams[5].eof = 1
|
||||||
|
session.garbageCollectStreams()
|
||||||
|
Expect(session.windowUpdateManager.streamOffsets).ToNot(HaveKey(protocol.StreamID(5)))
|
||||||
|
})
|
||||||
|
|
||||||
It("closes empty streams with error", func() {
|
It("closes empty streams with error", func() {
|
||||||
testErr := errors.New("test")
|
testErr := errors.New("test")
|
||||||
session.handleStreamFrame(&frames.StreamFrame{
|
session.handleStreamFrame(&frames.StreamFrame{
|
||||||
|
|||||||
@@ -64,3 +64,11 @@ func (m *windowUpdateManager) GetWindowUpdateFrames() []*frames.WindowUpdateFram
|
|||||||
|
|
||||||
return wuf
|
return wuf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RemoveStream should be called when a stream is closed for receiving
|
||||||
|
func (m *windowUpdateManager) RemoveStream(streamID protocol.StreamID) {
|
||||||
|
m.mutex.Lock()
|
||||||
|
defer m.mutex.Unlock()
|
||||||
|
|
||||||
|
delete(m.streamOffsets, streamID)
|
||||||
|
}
|
||||||
|
|||||||
@@ -74,4 +74,13 @@ var _ = Describe("WindowUpdateManager", func() {
|
|||||||
Expect(frames).To(BeEmpty())
|
Expect(frames).To(BeEmpty())
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Context("removing streams", func() {
|
||||||
|
It("deletes the map entry", func() {
|
||||||
|
wum.SetStreamOffset(7, 0x1000)
|
||||||
|
Expect(wum.streamOffsets).To(HaveKey(protocol.StreamID(7)))
|
||||||
|
wum.RemoveStream(7)
|
||||||
|
Expect(wum.streamOffsets).ToNot(HaveKey(protocol.StreamID(7)))
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user