d4edeab2c95165950c00debfac6d6807085983cc

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

Message

fix(daemon): handle multiple listeners gracefully

Diff

 1diff --git a/pkg/daemon/daemon.go b/pkg/daemon/daemon.go
 2index 2f7fd77e040eb8fb797e01481d61b32afd94bfb7..bbcdaa52bf3934d528a5311debc114b5f5bfe687 100644
 3--- a/pkg/daemon/daemon.go
 4+++ b/pkg/daemon/daemon.go
 5@@ -3,6 +3,7 @@ package daemon
 6 import (
 7 	"bytes"
 8 	"context"
 9+	"errors"
10 	"fmt"
11 	"net"
12 	"path/filepath"
13@@ -43,16 +44,17 @@ var ErrServerClosed = fmt.Errorf("git: %w", net.ErrClosed)
14 
15 // GitDaemon represents a Git daemon.
16 type GitDaemon struct {
17-	ctx      context.Context
18-	addr     string
19-	finished chan struct{}
20-	conns    connections
21-	cfg      *config.Config
22-	be       *backend.Backend
23-	wg       sync.WaitGroup
24-	once     sync.Once
25-	logger   *log.Logger
26-	done     atomic.Bool // indicates if the server has been closed
27+	ctx       context.Context
28+	addr      string
29+	finished  chan struct{}
30+	conns     connections
31+	cfg       *config.Config
32+	be        *backend.Backend
33+	wg        sync.WaitGroup
34+	once      sync.Once
35+	logger    *log.Logger
36+	done      atomic.Bool // indicates if the server has been closed
37+	listeners []net.Listener
38 }
39 
40 // NewDaemon returns a new Git daemon.
41@@ -91,7 +93,7 @@ func (d *GitDaemon) Serve(listener net.Listener) error {
42 
43 	d.wg.Add(1)
44 	defer d.wg.Done()
45-	defer listener.Close() //nolint:errcheck
46+	d.listeners = append(d.listeners, listener)
47 
48 	var tempDelay time.Duration
49 	for {