Skip to content

Commit 365539c

Browse files
committed
dnsx/alg,dnscrypt: m mutex for a thread-safe map
1 parent d24fcd8 commit 365539c

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

intra/dnscrypt/servers.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"encoding/hex"
2020
"errors"
2121
"fmt"
22+
"maps"
2223
"math/rand"
2324
"net"
2425
"net/netip"
@@ -178,7 +179,14 @@ func (serversInfo *ServersInfo) refresh(proxy *DcMulti) ([]string, error) {
178179
}
179180
var liveServers []string
180181
var err error
181-
for _, registeredServer := range serversInfo.registeredServers {
182+
183+
// Get a snapshot of registered servers under lock to prevent race conditions
184+
serversInfo.RLock()
185+
copied := make(map[string]registeredserver)
186+
maps.Copy(copied, serversInfo.registeredServers)
187+
serversInfo.RUnlock()
188+
189+
for _, registeredServer := range copied {
182190
if err = serversInfo.refreshServer(proxy, registeredServer.name, registeredServer.stamp); err == nil {
183191
liveServers = append(liveServers, registeredServer.name)
184192
} else {

intra/dnsx/alg.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,8 @@ func (p *xips) String() string {
258258
if p == nil {
259259
return "<nil>"
260260
}
261+
p.pmu.RLock()
262+
defer p.pmu.RUnlock()
261263
return fmt.Sprintf("xips: pri(%v) sec(%v)", p.pri, p.aux)
262264
}
263265

@@ -1922,7 +1924,7 @@ func Req(t Transport, network string, q *dns.Msg, smm *x.DNSSummary) (*dns.Msg,
19221924
}
19231925

19241926
if settings.Debug {
1925-
log.V("alg: Req: %s:%d servfail; by: %s, rdata: %d, status: %d, rcode %d",
1927+
log.V("alg: Req: %s:%d servfail; by: %s, rdata: %s, status: %d, rcode %d",
19261928
qname, qtyp, smm.ID, smm.RData, smm.Status, xdns.Rcode(r))
19271929
}
19281930
return r, err

0 commit comments

Comments
 (0)