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