From a084c87370e8a48d733383c82cd16de252f1629b Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Wed, 3 Sep 2025 18:49:22 +0700 Subject: [PATCH] fix: use background context for DNS listeners to survive reloads Change DNS listener context from parent context to background context so that listeners continue running during configuration reloads. Listener configuration changes require a service restart, not reload, so listeners must persist across reload operations. This prevents DNS listeners from being terminated when the parent context is cancelled during reload operations. --- cmd/cli/prog.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/cli/prog.go b/cmd/cli/prog.go index c2d896f..b9d318f 100644 --- a/cmd/cli/prog.go +++ b/cmd/cli/prog.go @@ -532,7 +532,10 @@ func (p *prog) run(reload bool, reloadCh chan struct{}) { } addr := net.JoinHostPort(listenerConfig.IP, strconv.Itoa(listenerConfig.Port)) p.Info().Msgf("starting DNS server on listener.%s: %s", listenerNum, addr) - if err := p.serveDNS(ctx, listenerNum); err != nil { + // serveCtx uses Background() context so listeners survive between reloads. + // Changes to listeners config require a service restart, not just reload. + serveCtx := context.Background() + if err := p.serveDNS(serveCtx, listenerNum); err != nil { p.Fatal().Err(err).Msgf("unable to start dns proxy on listener.%s", listenerNum) } p.Debug().Msgf("end of serveDNS listener.%s: %s", listenerNum, addr)