cmd/ctrld: prevent race condition when ping socket control server

This commit is contained in:
Cuong Manh Le
2023-08-04 20:05:51 +00:00
committed by Cuong Manh Le
parent e5389ffecb
commit 46e8d4fad7
2 changed files with 9 additions and 9 deletions

View File

@@ -1167,16 +1167,13 @@ func selfCheckStatus(s service.Service) service.Status {
if curStatus != service.StatusRunning {
return curStatus
}
if _, err := cc.post("/", nil); err != nil {
// Do not count attempt if the server is not ready yet.
if errUrlConnRefused(err) {
bo.BackOff(ctx, err)
continue
}
mainLog.Load().Warn().Err(err).Msg("could not ping socket control server")
return service.StatusUnknown
if _, err := cc.post("/", nil); err == nil {
// Server was started, stop pinging.
break
}
break
// The socket control server is not ready yet, backoff for waiting it to be ready.
bo.BackOff(ctx, err)
continue
}
resp, err := cc.post(startedPath, nil)
if err != nil {

View File

@@ -35,6 +35,9 @@ func newControlServer(addr string) (*controlServer, error) {
func (s *controlServer) start() error {
_ = os.Remove(s.addr)
unixListener, err := net.Listen("unix", s.addr)
if l, ok := unixListener.(*net.UnixListener); ok {
l.SetUnlinkOnClose(true)
}
if err != nil {
return err
}