[client] fix can not close

This commit is contained in:
lizhisheng 2022-07-22 19:21:40 +08:00
parent a1f2d15614
commit 70dcad0078

View File

@ -123,6 +123,10 @@ func (svr *Service) Run() error {
// login to frps // login to frps
for { for {
if atomic.LoadUint32(&svr.exit) != 0 {
return nil
}
conn, session, err := svr.login() conn, session, err := svr.login()
if err != nil { if err != nil {
xl.Warn("login to server failed: %v", err) xl.Warn("login to server failed: %v", err)
@ -174,10 +178,15 @@ func (svr *Service) keepControllerWorking() {
reconnectCounts := 1 reconnectCounts := 1
for { for {
<-svr.ctl.ClosedDoneCh() select {
case <-svr.ctl.ClosedDoneCh():
case <-time.After(5 * time.Second):
if atomic.LoadUint32(&svr.exit) != 0 { if atomic.LoadUint32(&svr.exit) != 0 {
svr.ctl.GracefulClose(0)
return return
} }
continue
}
// the first three retry with no delay // the first three retry with no delay
if reconnectCounts > 3 { if reconnectCounts > 3 {
@ -217,9 +226,13 @@ func (svr *Service) keepControllerWorking() {
// reconnect success, init delayTime // reconnect success, init delayTime
delayTime = time.Second delayTime = time.Second
svr.ctlMu.Lock()
if atomic.LoadUint32(&svr.exit) != 0 {
svr.ctlMu.Unlock()
return
}
ctl := NewControl(svr.ctx, svr.runID, conn, session, svr.cfg, svr.pxyCfgs, svr.visitorCfgs, svr.serverUDPPort, svr.authSetter) ctl := NewControl(svr.ctx, svr.runID, conn, session, svr.cfg, svr.pxyCfgs, svr.visitorCfgs, svr.serverUDPPort, svr.authSetter)
ctl.Run() ctl.Run()
svr.ctlMu.Lock()
if svr.ctl != nil { if svr.ctl != nil {
svr.ctl.Close() svr.ctl.Close()
} }