Diff
1diff --git a/pkg/daemon/daemon.go b/pkg/daemon/daemon.go
2index bbcdaa52bf3934d528a5311debc114b5f5bfe687..3afe5e766b7765fb78321e6d5e80dad1f65e65b4 100644
3--- a/pkg/daemon/daemon.go
4+++ b/pkg/daemon/daemon.go
5@@ -55,6 +55,7 @@ type GitDaemon struct {
6 logger *log.Logger
7 done atomic.Bool // indicates if the server has been closed
8 listeners []net.Listener
9+ liMu sync.Mutex
10 }
11
12 // NewDaemon returns a new Git daemon.
13@@ -93,7 +94,9 @@ func (d *GitDaemon) Serve(listener net.Listener) error {
14
15 d.wg.Add(1)
16 defer d.wg.Done()
17+ d.liMu.Lock()
18 d.listeners = append(d.listeners, listener)
19+ d.liMu.Unlock()
20
21 var tempDelay time.Duration
22 for {
23@@ -324,12 +327,14 @@ func (d *GitDaemon) closeListener() error {
24 return ErrServerClosed
25 }
26 var err error
27+ d.liMu.Lock()
28 for _, l := range d.listeners {
29 if err = l.Close(); err != nil {
30 err = errors.Join(err, fmt.Errorf("close listener %s: %w", l.Addr(), err))
31 }
32 }
33 d.listeners = d.listeners[:0]
34+ d.liMu.Unlock()
35 d.once.Do(func() {
36 d.done.Store(true)
37 close(d.finished)