diff --git a/app/proxyman/mux/mux.go b/app/proxyman/mux/mux.go index 9b62c4b3..96cd9cbd 100644 --- a/app/proxyman/mux/mux.go +++ b/app/proxyman/mux/mux.go @@ -158,6 +158,8 @@ func (m *Client) Closed() bool { } func (m *Client) monitor() { + defer m.manager.onClientFinish() + for { select { case <-m.ctx.Done(): @@ -166,17 +168,21 @@ func (m *Client) monitor() { case id := <-m.session2Remove: m.access.Lock() delete(m.sessions, id) + if len(m.sessions) == 0 { + m.cancel() + } m.access.Unlock() } } } func (m *Client) cleanup() { - defer m.manager.onClientFinish() - m.access.Lock() defer m.access.Unlock() + m.inboundRay.InboundInput().Close() + m.inboundRay.InboundOutput().CloseError() + for _, s := range m.sessions { s.closeUplink() s.closeDownlink()