fix sync.once bug

必须使用引用,如果单纯值传递,once 也被复制了一份,导致单例不起作用。
This commit is contained in:
lyyyuna 2021-06-20 21:15:25 +08:00
parent 8df7498c33
commit ca58af2865
2 changed files with 5 additions and 8 deletions

View File

@ -14,10 +14,10 @@ import (
// listServices return all service informations // listServices return all service informations
func (gs *gocServer) listServices(c *gin.Context) { func (gs *gocServer) listServices(c *gin.Context) {
agents := make([]gocCoveredAgent, 0) agents := make([]*gocCoveredAgent, 0)
gs.rpcClients.Range(func(key, value interface{}) bool { gs.rpcClients.Range(func(key, value interface{}) bool {
agent, ok := value.(gocCoveredAgent) agent, ok := value.(*gocCoveredAgent)
if !ok { if !ok {
return false return false
} }
@ -40,7 +40,7 @@ func (gs *gocServer) getProfiles(c *gin.Context) {
mergedProfiles := make([][]*cover.Profile, 0) mergedProfiles := make([][]*cover.Profile, 0)
gs.rpcClients.Range(func(key, value interface{}) bool { gs.rpcClients.Range(func(key, value interface{}) bool {
agent, ok := value.(gocCoveredAgent) agent, ok := value.(*gocCoveredAgent)
if !ok { if !ok {
return false return false
} }
@ -80,7 +80,6 @@ func (gs *gocServer) getProfiles(c *gin.Context) {
}) })
} }
} }
// append profile // append profile
profile, err := convertProfile([]byte(res)) profile, err := convertProfile([]byte(res))
if err != nil { if err != nil {

View File

@ -41,7 +41,7 @@ func (gs *gocServer) serveRpcStream(c *gin.Context) {
return return
} }
gocA := gocCoveredAgent{ gocA := &gocCoveredAgent{
RemoteIP: remoteIP.String(), RemoteIP: remoteIP.String(),
Hostname: hostname, Hostname: hostname,
Pid: pid, Pid: pid,
@ -104,9 +104,7 @@ func (gs *gocServer) serveRpcStream(c *gin.Context) {
gocA.Id = string(clientId) gocA.Id = string(clientId)
gs.rpcClients.Store(clientId, gocA) gs.rpcClients.Store(clientId, gocA)
// wait for exit // wait for exit
for {
<-gocA.exitCh <-gocA.exitCh
}
} }
func (gs *gocServer) wsping(ws *websocket.Conn, deadline time.Duration) error { func (gs *gocServer) wsping(ws *websocket.Conn, deadline time.Duration) error {