forked from quic-go/quic-go
remove remote closed session from the packet handler map
This commit is contained in:
18
session.go
18
session.go
@@ -95,7 +95,7 @@ func (r *handshakeRunner) OnHandshakeComplete() { r.onHandshakeC
|
||||
type closeError struct {
|
||||
err error
|
||||
remote bool
|
||||
sendClose bool
|
||||
immediate bool
|
||||
}
|
||||
|
||||
var errCloseForRecreating = errors.New("closing session in order to recreate it")
|
||||
@@ -923,7 +923,7 @@ func (s *session) closeLocal(e error) {
|
||||
} else {
|
||||
s.logger.Errorf("Closing session with error: %s", e)
|
||||
}
|
||||
s.closeChan <- closeError{err: e, sendClose: true, remote: false}
|
||||
s.closeChan <- closeError{err: e, immediate: false, remote: false}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -940,8 +940,7 @@ func (s *session) destroyImpl(e error) {
|
||||
} else {
|
||||
s.logger.Errorf("Destroying session %s with error: %s", s.connIDManager.Get(), e)
|
||||
}
|
||||
s.sessionRunner.Remove(s.srcConnID)
|
||||
s.closeChan <- closeError{err: e, sendClose: false, remote: false}
|
||||
s.closeChan <- closeError{err: e, immediate: true, remote: false}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -956,8 +955,7 @@ func (s *session) closeForRecreating() protocol.PacketNumber {
|
||||
func (s *session) closeRemote(e error) {
|
||||
s.closeOnce.Do(func() {
|
||||
s.logger.Errorf("Peer closed session with error: %s", e)
|
||||
s.sessionRunner.ReplaceWithClosed(s.srcConnID, newClosedRemoteSession(s.perspective))
|
||||
s.closeChan <- closeError{err: e, remote: true}
|
||||
s.closeChan <- closeError{err: e, immediate: true, remote: true}
|
||||
})
|
||||
}
|
||||
|
||||
@@ -988,11 +986,13 @@ func (s *session) handleCloseError(closeErr closeError) {
|
||||
|
||||
s.streamsMap.CloseWithError(quicErr)
|
||||
|
||||
if !closeErr.sendClose {
|
||||
return
|
||||
}
|
||||
// If this is a remote close we're done here
|
||||
if closeErr.remote {
|
||||
s.sessionRunner.ReplaceWithClosed(s.srcConnID, newClosedRemoteSession(s.perspective))
|
||||
return
|
||||
}
|
||||
if closeErr.immediate {
|
||||
s.sessionRunner.Remove(s.srcConnID)
|
||||
return
|
||||
}
|
||||
connClosePacket, err := s.sendConnectionClose(quicErr)
|
||||
|
||||
@@ -1768,7 +1768,6 @@ var _ = Describe("Client Session", func() {
|
||||
// Illustrates that an injected Initial with a CONNECTION_CLOSE frame causes
|
||||
// the connection to immediately break down
|
||||
It("fails on Initial-level CONNECTION_CLOSE frame", func() {
|
||||
sessionRunner.EXPECT().ReplaceWithClosed(gomock.Any(), gomock.Any())
|
||||
connCloseFrame := testutils.ComposeConnCloseFrame()
|
||||
initialPacket := testutils.ComposeInitialPacket(destConnID, sess.srcConnID, sess.version, destConnID, []wire.Frame{connCloseFrame})
|
||||
Expect(sess.handlePacketImpl(wrapPacket(initialPacket))).To(BeTrue())
|
||||
|
||||
Reference in New Issue
Block a user