diff --git a/transport/internet/hysteria/dialer.go b/transport/internet/hysteria/dialer.go index c652b40aa..1d7b8a95e 100644 --- a/transport/internet/hysteria/dialer.go +++ b/transport/internet/hysteria/dialer.go @@ -300,23 +300,21 @@ type clientManager struct { func (m *clientManager) clean() { ticker := time.NewTicker(idleCleanupInterval) for range ticker.C { - var forced []dialerConf - m.RLock() + entries := make(map[dialerConf]*client, len(m.m)) for k, c := range m.m { + entries[k] = c + } + m.RUnlock() + for k, c := range entries { force := c.instance != nil && !c.instance.IsRunning() c.clean(force) if force { - forced = append(forced, k) + m.Lock() + delete(m.m, k) + m.Unlock() } } - m.RUnlock() - - for i := range forced { - m.Lock() - delete(m.m, forced[i]) - m.Unlock() - } } }