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