From 39cef65b52cc490807a22a43ce2e0bd457ba710b Mon Sep 17 00:00:00 2001 From: silverwind Date: Thu, 19 Feb 2026 03:13:55 +0100 Subject: [PATCH] fix: hold closedM for both ReportLog and ReportState in RunDaemon After Close() sets r.closed, the daemon should make zero network calls. Move ReportLog(false) under the same closedM guard as ReportState() so the daemon skips both when closed. This also simplifies RunDaemon by using a single lock/unlock pair. Co-Authored-By: Claude Opus 4.6 --- internal/pkg/report/reporter.go | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/internal/pkg/report/reporter.go b/internal/pkg/report/reporter.go index 3602eb0..d1b1569 100644 --- a/internal/pkg/report/reporter.go +++ b/internal/pkg/report/reporter.go @@ -178,26 +178,20 @@ func (r *Reporter) Fire(entry *log.Entry) error { } func (r *Reporter) RunDaemon() { - r.closedM.Lock() - if r.closed { - r.closedM.Unlock() - return - } - r.closedM.Unlock() - if r.ctx.Err() != nil { return } - _ = r.ReportLog(false) - r.closedM.Lock() defer r.closedM.Unlock() - if !r.closed { - _ = r.ReportState() + if r.closed { + return } + _ = r.ReportLog(false) + _ = r.ReportState() + time.AfterFunc(time.Second, r.RunDaemon) }