From e47206c18d273d735dedd56af201a38db4af41df Mon Sep 17 00:00:00 2001 From: Stavros Date: Tue, 19 May 2026 19:07:25 +0300 Subject: [PATCH] fix: review comments --- internal/service/tailscale_service.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/internal/service/tailscale_service.go b/internal/service/tailscale_service.go index f750b9f7..52275882 100644 --- a/internal/service/tailscale_service.go +++ b/internal/service/tailscale_service.go @@ -32,6 +32,7 @@ type TailscaleService struct { srv *tsnet.Server lc *local.Client ln *net.Listener + mu sync.Mutex } func NewTailscaleService(log *logger.Logger, config model.Config, ctx context.Context, wg *sync.WaitGroup) (*TailscaleService, error) { @@ -60,6 +61,7 @@ func NewTailscaleService(log *logger.Logger, config model.Config, ctx context.Co lc, err := srv.LocalClient() if err != nil { + _ = srv.Close() return nil, fmt.Errorf("failed to get tailscale local client: %w", err) } @@ -78,6 +80,7 @@ func NewTailscaleService(log *logger.Logger, config model.Config, ctx context.Co err = service.waitForConn(connectCtx) if err != nil { + _ = srv.Close() return nil, fmt.Errorf("failed to connect to tailscale network: %w", err) } @@ -89,10 +92,16 @@ func NewTailscaleService(log *logger.Logger, config model.Config, ctx context.Co func (ts *TailscaleService) watchAndClose() { <-ts.ctx.Done() ts.log.App.Debug().Msg("Shutting down Tailscale service") - if ts.ln != nil { + ts.mu.Lock() + srv := ts.srv + ln := ts.ln + ts.ln = nil + ts.srv = nil + ts.mu.Unlock() + if ln != nil { (*ts.ln).Close() } - if ts.srv != nil { + if srv != nil { ts.srv.Close() } } @@ -119,6 +128,9 @@ func (ts *TailscaleService) Whois(ctx context.Context, addr string) (*TailscaleW } func (ts *TailscaleService) CreateListener() (net.Listener, error) { + ts.mu.Lock() + defer ts.mu.Unlock() + if ts.ln != nil { return *ts.ln, nil }