Fix regression for timed-out stream cleanups

If a stream is already timed-out, then either the data or error stream
may be `nil`. This would cause a segmentation fault, which is now
covered with this patch.

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
This commit is contained in:
Sascha Grunert 2021-06-01 17:04:04 +02:00
parent cf1e939ce5
commit f2ca9c1794
No known key found for this signature in database
GPG Key ID: 09D97D153EF94D93
2 changed files with 7 additions and 1 deletions

View File

@ -123,7 +123,10 @@ func (c *connection) Close() error {
func (c *connection) RemoveStreams(streams ...httpstream.Stream) {
c.streamLock.Lock()
for _, stream := range streams {
delete(c.streams, stream.Identifier())
// It may be possible that the provided stream is nil if timed out.
if stream != nil {
delete(c.streams, stream.Identifier())
}
}
c.streamLock.Unlock()
}

View File

@ -323,6 +323,9 @@ func TestConnectionRemoveStreams(t *testing.T) {
// remove all existing
c.RemoveStreams(stream0, stream1)
// remove nil stream should not crash
c.RemoveStreams(nil)
if len(c.streams) != 0 {
t.Fatalf("should not have any streams, has %d", len(c.streams))
}