From bd0986216b7b7d9c1451973406f772392f0798c6 Mon Sep 17 00:00:00 2001 From: ZacharyZcR Date: Mon, 27 Apr 2026 20:06:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20ProxyStats=20?= =?UTF-8?q?=E5=90=AB=20mutex=20=E5=AF=BC=E8=87=B4=E7=9A=84=20copylocks=20?= =?UTF-8?q?=E5=91=8A=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stats() 方法改为手动构造副本,避免值拷贝复制 sync.Mutex --- common/proxy/manager.go | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/common/proxy/manager.go b/common/proxy/manager.go index c25d816..5e1c24a 100644 --- a/common/proxy/manager.go +++ b/common/proxy/manager.go @@ -128,9 +128,19 @@ func (m *manager) Stats() *ProxyStats { m.mu.RLock() defer m.mu.RUnlock() - // 返回副本以避免并发问题 - statsCopy := *m.stats - return &statsCopy + m.stats.mu.Lock() + defer m.stats.mu.Unlock() + + return &ProxyStats{ + TotalConnections: atomic.LoadInt64(&m.stats.TotalConnections), + ActiveConnections: atomic.LoadInt64(&m.stats.ActiveConnections), + FailedConnections: atomic.LoadInt64(&m.stats.FailedConnections), + AverageConnectTime: m.stats.AverageConnectTime, + LastConnectTime: m.stats.LastConnectTime, + LastError: m.stats.LastError, + ProxyType: m.stats.ProxyType, + ProxyAddress: m.stats.ProxyAddress, + } } // createDirectDialer 创建直连拨号器