From ba4e980876936178483ee1d26baffa6bd115e337 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 10 Dec 2017 23:23:27 +0700 Subject: [PATCH 1/2] remove the internal error for MAX_STREAM_DATA frames for closed streams --- session.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/session.go b/session.go index 7cc190bd..8c183241 100644 --- a/session.go +++ b/session.go @@ -32,8 +32,7 @@ type receivedPacket struct { } var ( - errRstStreamOnInvalidStream = errors.New("RST_STREAM received for unknown stream") - errWindowUpdateOnClosedStream = errors.New("WINDOW_UPDATE received for an already closed stream") + errRstStreamOnInvalidStream = errors.New("RST_STREAM received for unknown stream") ) var ( @@ -551,8 +550,6 @@ func (s *session) handleFrames(fs []wire.Frame, encLevel protocol.EncryptionLeve case errRstStreamOnInvalidStream: // Can happen when RST_STREAMs arrive early or late (?) utils.Errorf("Ignoring error in session: %s", err.Error()) - case errWindowUpdateOnClosedStream: - // Can happen when we already sent the last StreamFrame with the FinBit, but the client already sent a WindowUpdate for this Stream default: return err } @@ -597,7 +594,8 @@ func (s *session) handleMaxStreamDataFrame(frame *wire.MaxStreamDataFrame) error return err } if str == nil { - return errWindowUpdateOnClosedStream + // stream is closed and already garbage collected + return nil } str.UpdateSendWindow(frame.ByteOffset) return nil From 51c5cc46d84221b7475ba5c618ac43ebd0049f73 Mon Sep 17 00:00:00 2001 From: Marten Seemann Date: Sun, 10 Dec 2017 23:34:09 +0700 Subject: [PATCH 2/2] remove the internal error for RST_STREAM frames for closed streams --- session.go | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/session.go b/session.go index 8c183241..467c992e 100644 --- a/session.go +++ b/session.go @@ -31,10 +31,6 @@ type receivedPacket struct { rcvTime time.Time } -var ( - errRstStreamOnInvalidStream = errors.New("RST_STREAM received for unknown stream") -) - var ( newCryptoSetup = handshake.NewCryptoSetup newCryptoSetupClient = handshake.NewCryptoSetupClient @@ -547,9 +543,6 @@ func (s *session) handleFrames(fs []wire.Frame, encLevel protocol.EncryptionLeve switch err { case ackhandler.ErrDuplicateOrOutOfOrderAck: // Can happen e.g. when packets thought missing arrive late - case errRstStreamOnInvalidStream: - // Can happen when RST_STREAMs arrive early or late (?) - utils.Errorf("Ignoring error in session: %s", err.Error()) default: return err } @@ -607,7 +600,8 @@ func (s *session) handleRstStreamFrame(frame *wire.RstStreamFrame) error { return err } if str == nil { - return errRstStreamOnInvalidStream + // stream is closed and already garbage collected + return nil } return str.RegisterRemoteError(fmt.Errorf("RST_STREAM received with code %d", frame.ErrorCode), frame.ByteOffset) }