From c2dd4fa9a303ad871cb32dec44110733832f4b19 Mon Sep 17 00:00:00 2001 From: xfy Date: Wed, 3 Jun 2026 01:07:54 +0800 Subject: [PATCH] fix(resolver): prevent double-close panic in DNSResolver.Stop() Use atomic Swap instead of Load+close+Store to eliminate the race window where concurrent Stop() calls could both pass the check. --- internal/resolver/resolver.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/resolver/resolver.go b/internal/resolver/resolver.go index 4918235..e150b90 100644 --- a/internal/resolver/resolver.go +++ b/internal/resolver/resolver.go @@ -406,12 +406,11 @@ func (r *DNSResolver) doRefresh() { // Stop 停止解析器。 func (r *DNSResolver) Stop() error { - if !r.started.Load() { + if !r.started.Swap(false) { return nil } close(r.stopCh) - r.started.Store(false) return nil }