From bd5864026e21da1260a4ebdf2f0361b1fed5b915 Mon Sep 17 00:00:00 2001 From: Jason Date: Sun, 11 Aug 2019 15:50:14 +0800 Subject: [PATCH] use sync.Once --- common/stats/stats.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/common/stats/stats.go b/common/stats/stats.go index b28b674..185449e 100644 --- a/common/stats/stats.go +++ b/common/stats/stats.go @@ -2,6 +2,7 @@ package stats import ( "net" + "sync" "sync/atomic" "time" ) @@ -30,6 +31,8 @@ type Session struct { type SessionConn struct { net.Conn *Session + + once sync.Once } func NewSessionConn(conn net.Conn, session *Session) net.Conn { @@ -56,9 +59,9 @@ func (c *SessionConn) Write(b []byte) (n int, err error) { } func (c *SessionConn) Close() error { - if c.SessionClose.IsZero() { + c.once.Do(func() { c.SessionClose = time.Now() - } + }) return c.Conn.Close() } @@ -66,6 +69,8 @@ func (c *SessionConn) Close() error { type SessionPacketConn struct { net.PacketConn *Session + + once sync.Once } func NewSessionPacketConn(conn net.PacketConn, session *Session) net.PacketConn { @@ -92,8 +97,8 @@ func (c *SessionPacketConn) WriteTo(b []byte, addr net.Addr) (n int, err error) } func (c *SessionPacketConn) Close() error { - if c.SessionClose.IsZero() { + c.once.Do(func() { c.SessionClose = time.Now() - } + }) return c.PacketConn.Close() }