From 228e225f8418457ee398fb24d3b5009204483d2f Mon Sep 17 00:00:00 2001 From: Tank Date: Tue, 12 May 2020 22:09:16 +0800 Subject: [PATCH] fix: sync/atomic bug, fix #1804 (#1805) Co-authored-by: tanghuafa --- models/metrics/mem/server.go | 10 +++++----- tests/util/util.go | 1 + utils/metric/counter.go | 24 ++++++++++++------------ 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/models/metrics/mem/server.go b/models/metrics/mem/server.go index d7c191f..307583a 100644 --- a/models/metrics/mem/server.go +++ b/models/metrics/mem/server.go @@ -177,12 +177,12 @@ func (m *serverMetrics) GetServer() *ServerStats { s := &ServerStats{ TotalTrafficIn: m.info.TotalTrafficIn.TodayCount(), TotalTrafficOut: m.info.TotalTrafficOut.TodayCount(), - CurConns: m.info.CurConns.Count(), - ClientCounts: m.info.ClientCounts.Count(), + CurConns: int64(m.info.CurConns.Count()), + ClientCounts: int64(m.info.ClientCounts.Count()), ProxyTypeCounts: make(map[string]int64), } for k, v := range m.info.ProxyTypeCounts { - s.ProxyTypeCounts[k] = v.Count() + s.ProxyTypeCounts[k] = int64(v.Count()) } return s } @@ -202,7 +202,7 @@ func (m *serverMetrics) GetProxiesByType(proxyType string) []*ProxyStats { Type: proxyStats.ProxyType, TodayTrafficIn: proxyStats.TrafficIn.TodayCount(), TodayTrafficOut: proxyStats.TrafficOut.TodayCount(), - CurConns: proxyStats.CurConns.Count(), + CurConns: int64(proxyStats.CurConns.Count()), } if !proxyStats.LastStartTime.IsZero() { ps.LastStartTime = proxyStats.LastStartTime.Format("01-02 15:04:05") @@ -233,7 +233,7 @@ func (m *serverMetrics) GetProxiesByTypeAndName(proxyType string, proxyName stri Type: proxyStats.ProxyType, TodayTrafficIn: proxyStats.TrafficIn.TodayCount(), TodayTrafficOut: proxyStats.TrafficOut.TodayCount(), - CurConns: proxyStats.CurConns.Count(), + CurConns: int64(proxyStats.CurConns.Count()), } if !proxyStats.LastStartTime.IsZero() { res.LastStartTime = proxyStats.LastStartTime.Format("01-02 15:04:05") diff --git a/tests/util/util.go b/tests/util/util.go index 3dfd28f..65e9d96 100644 --- a/tests/util/util.go +++ b/tests/util/util.go @@ -143,6 +143,7 @@ func SendUdpMsg(addr string, msg string) (res string, err error) { return } + conn.SetReadDeadline(time.Now().Add(10 * time.Second)) buf := make([]byte, 2048) n, errRet := conn.Read(buf) if errRet != nil { diff --git a/utils/metric/counter.go b/utils/metric/counter.go index 4b9c7a6..ae16b67 100644 --- a/utils/metric/counter.go +++ b/utils/metric/counter.go @@ -19,9 +19,9 @@ import ( ) type Counter interface { - Count() int64 - Inc(int64) - Dec(int64) + Count() int32 + Inc(int32) + Dec(int32) Snapshot() Counter Clear() } @@ -33,28 +33,28 @@ func NewCounter() Counter { } type StandardCounter struct { - count int64 + count int32 } -func (c *StandardCounter) Count() int64 { - return atomic.LoadInt64(&c.count) +func (c *StandardCounter) Count() int32 { + return atomic.LoadInt32(&c.count) } -func (c *StandardCounter) Inc(count int64) { - atomic.AddInt64(&c.count, count) +func (c *StandardCounter) Inc(count int32) { + atomic.AddInt32(&c.count, count) } -func (c *StandardCounter) Dec(count int64) { - atomic.AddInt64(&c.count, -count) +func (c *StandardCounter) Dec(count int32) { + atomic.AddInt32(&c.count, -count) } func (c *StandardCounter) Snapshot() Counter { tmp := &StandardCounter{ - count: atomic.LoadInt64(&c.count), + count: atomic.LoadInt32(&c.count), } return tmp } func (c *StandardCounter) Clear() { - atomic.StoreInt64(&c.count, 0) + atomic.StoreInt32(&c.count, 0) }