🐛 fix(config): remove racy log.Info in WatchAndApply cancel goroutine (#48)
Some checks failed
CI/CD Pipeline / Build Docker Cache (push) Successful in 11s
CI/CD Pipeline / Trigger Docker Push (push) Has been cancelled
CI/CD Pipeline / CI Pipeline (push) Has been cancelled

Co-authored-by: Gabriel Radureau <arcodange@gmail.com>
Co-committed-by: Gabriel Radureau <arcodange@gmail.com>
This commit was merged in pull request #48.
This commit is contained in:
2026-05-05 09:40:03 +02:00
committed by arcodange
parent 3d9746ed65
commit f97b6874c9

View File

@@ -730,11 +730,14 @@ func (c *Config) WatchAndApply(ctx context.Context) {
// Stop the watcher on context cancel — we set a flag that the
// OnConfigChange handler checks, avoiding the race with viper's
// internal state that would occur if we called OnConfigChange again.
// We deliberately do NOT log here: viper's internal watcher goroutine
// has no public Stop, so it can outlive ctx, and a zerolog call here
// would race with the next test's LoadConfig → SetupLogging →
// zerolog.SetGlobalLevel under -race (observed 2026-05-05).
go func() {
<-ctx.Done()
c.reloadMu.Lock()
c.watcherStopped = true
c.reloadMu.Unlock()
log.Info().Msg("Config hot-reload watcher stopped")
}()
}