From ca58af2865c0dca751efa3dbece511fda1c599ee Mon Sep 17 00:00:00 2001 From: lyyyuna Date: Sun, 20 Jun 2021 21:15:25 +0800 Subject: [PATCH] fix sync.once bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 必须使用引用,如果单纯值传递,once 也被复制了一份,导致单例不起作用。 --- pkg/server/api.go | 7 +++---- pkg/server/rpcstream.go | 6 ++---- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/pkg/server/api.go b/pkg/server/api.go index 69c9197..81e49c9 100644 --- a/pkg/server/api.go +++ b/pkg/server/api.go @@ -14,10 +14,10 @@ import ( // listServices return all service informations func (gs *gocServer) listServices(c *gin.Context) { - agents := make([]gocCoveredAgent, 0) + agents := make([]*gocCoveredAgent, 0) gs.rpcClients.Range(func(key, value interface{}) bool { - agent, ok := value.(gocCoveredAgent) + agent, ok := value.(*gocCoveredAgent) if !ok { return false } @@ -40,7 +40,7 @@ func (gs *gocServer) getProfiles(c *gin.Context) { mergedProfiles := make([][]*cover.Profile, 0) gs.rpcClients.Range(func(key, value interface{}) bool { - agent, ok := value.(gocCoveredAgent) + agent, ok := value.(*gocCoveredAgent) if !ok { return false } @@ -80,7 +80,6 @@ func (gs *gocServer) getProfiles(c *gin.Context) { }) } } - // append profile profile, err := convertProfile([]byte(res)) if err != nil { diff --git a/pkg/server/rpcstream.go b/pkg/server/rpcstream.go index d87f273..87d331c 100644 --- a/pkg/server/rpcstream.go +++ b/pkg/server/rpcstream.go @@ -41,7 +41,7 @@ func (gs *gocServer) serveRpcStream(c *gin.Context) { return } - gocA := gocCoveredAgent{ + gocA := &gocCoveredAgent{ RemoteIP: remoteIP.String(), Hostname: hostname, Pid: pid, @@ -104,9 +104,7 @@ func (gs *gocServer) serveRpcStream(c *gin.Context) { gocA.Id = string(clientId) gs.rpcClients.Store(clientId, gocA) // wait for exit - for { - <-gocA.exitCh - } + <-gocA.exitCh } func (gs *gocServer) wsping(ws *websocket.Conn, deadline time.Duration) error {