diff --git a/.golangci.yml b/.golangci.yml index be61d89ba130fbb50371386e01017eab20854930..4fac29c26d828a7aed03ddc2b8b0a469c0a85a2d 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -7,7 +7,6 @@ linters: - exhaustive - goconst - godot - - godox - gomoddirectives - goprintffuncname - gosec diff --git a/pkg/daemon/daemon.go b/pkg/daemon/daemon.go index d202b335d16bfdbd2c9e2241e3ba8d490a3c5dea..30faadd7aac103ccf7110b36f402908f3ee67ed1 100644 --- a/pkg/daemon/daemon.go +++ b/pkg/daemon/daemon.go @@ -55,6 +55,7 @@ type GitDaemon struct { logger *log.Logger done atomic.Bool // indicates if the server has been closed listeners []net.Listener + liMu sync.Mutex } // NewDaemon returns a new Git daemon. @@ -93,7 +94,9 @@ func (d *GitDaemon) Serve(listener net.Listener) error { d.wg.Add(1) defer d.wg.Done() + d.liMu.Lock() d.listeners = append(d.listeners, listener) + d.liMu.Unlock() var tempDelay time.Duration for { @@ -324,12 +327,14 @@ func (d *GitDaemon) closeListener() error { return ErrServerClosed } var err error + d.liMu.Lock() for _, l := range d.listeners { if err = l.Close(); err != nil { err = errors.Join(err, fmt.Errorf("close listener %s: %w", l.Addr(), err)) } } d.listeners = d.listeners[:0] + d.liMu.Unlock() d.once.Do(func() { d.done.Store(true) close(d.finished)