diff --git a/transport/anytls/session/client.go b/transport/anytls/session/client.go index 5e99f135..50fd7b42 100644 --- a/transport/anytls/session/client.go +++ b/transport/anytls/session/client.go @@ -83,11 +83,7 @@ func (c *Client) CreateStream(ctx context.Context) (net.Conn, error) { } stream.dieHook = func() { - if session.IsClosed() { - if session.dieHook != nil { - session.dieHook() - } - } else { + if !session.IsClosed() { select { case <-c.die.Done(): // Now client has been closed @@ -154,10 +150,10 @@ func (c *Client) Close() error { c.sessionsLock.Lock() sessionToClose := make([]*Session, 0, len(c.sessions)) - for seq, session := range c.sessions { + for _, session := range c.sessions { sessionToClose = append(sessionToClose, session) - delete(c.sessions, seq) } + c.sessions = make(map[uint64]*Session) c.sessionsLock.Unlock() for _, session := range sessionToClose { diff --git a/transport/anytls/session/session.go b/transport/anytls/session/session.go index 85d82353..d16b278b 100644 --- a/transport/anytls/session/session.go +++ b/transport/anytls/session/session.go @@ -108,10 +108,11 @@ func (s *Session) Close() error { if once { if s.dieHook != nil { s.dieHook() + s.dieHook = nil } s.streamLock.Lock() - for k := range s.streams { - s.streams[k].Close() + for _, stream := range s.streams { + stream.Close() } s.streams = make(map[uint32]*Stream) s.streamLock.Unlock()