Explorar o código

fix: data races when accessing `github.com/fatedier/frp/client.(*Service).ctl` (#2891)

* fix: data race in client/service.go

* review fixes
Colin Adler %!s(int64=2) %!d(string=hai) anos
pai
achega
6481870d03
Modificáronse 1 ficheiros con 6 adicións e 0 borrados
  1. 6 0
      client/service.go

+ 6 - 0
client/service.go

@@ -356,6 +356,8 @@ func (svr *Service) ReloadConf(pxyCfgs map[string]config.ProxyConf, visitorCfgs
 	svr.visitorCfgs = visitorCfgs
 	svr.cfgMu.Unlock()
 
+	svr.ctlMu.RLock()
+	defer svr.ctlMu.RUnlock()
 	return svr.ctl.ReloadConf(pxyCfgs, visitorCfgs)
 }
 
@@ -365,8 +367,12 @@ func (svr *Service) Close() {
 
 func (svr *Service) GracefulClose(d time.Duration) {
 	atomic.StoreUint32(&svr.exit, 1)
+
+	svr.ctlMu.RLock()
 	if svr.ctl != nil {
 		svr.ctl.GracefulClose(d)
 	}
+	svr.ctlMu.RUnlock()
+
 	svr.cancel()
 }