fix: data race on test DNS handler flag under -race
TestClientAgainstLocalServer captured RecursionDesired into a plain bool from the miekg server handler goroutine and read it from the test goroutine; the UDP round-trip gives no happens-before edge, so CI's -race run flagged it. Use atomic.Bool. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
ccfd3fd156
commit
ccf0e6b0dc
@@ -3,6 +3,7 @@ package dns
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net"
|
"net"
|
||||||
|
"sync/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -107,9 +108,11 @@ func TestRealExchangeUnreachable(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestClientAgainstLocalServer(t *testing.T) {
|
func TestClientAgainstLocalServer(t *testing.T) {
|
||||||
var sawRD bool
|
// Written by the server handler goroutine, read by the test goroutine;
|
||||||
|
// the UDP round-trip provides no happens-before edge, so use an atomic.
|
||||||
|
var sawRD atomic.Bool
|
||||||
addr := startTestDNSServer(t, "udp", func(w dns.ResponseWriter, r *dns.Msg) {
|
addr := startTestDNSServer(t, "udp", func(w dns.ResponseWriter, r *dns.Msg) {
|
||||||
sawRD = r.RecursionDesired
|
sawRD.Store(r.RecursionDesired)
|
||||||
aHandler("5.6.7.8")(w, r)
|
aHandler("5.6.7.8")(w, r)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -127,7 +130,7 @@ func TestClientAgainstLocalServer(t *testing.T) {
|
|||||||
if len(resp.Answer) == 0 {
|
if len(resp.Answer) == 0 {
|
||||||
t.Fatal("expected answers")
|
t.Fatal("expected answers")
|
||||||
}
|
}
|
||||||
if sawRD {
|
if sawRD.Load() {
|
||||||
t.Error("wire query must have RD=0")
|
t.Error("wire query must have RD=0")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user