02eaf7fb73a772942e705d723c284d9fd6882d8f

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

Merge branch 'main' into v2-exp

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)