fast resolver: cancel queries lost race

This commit is contained in:
Vladislav Yarmak
2025-09-23 23:19:28 +03:00
parent 872fc61a19
commit 71e1f4b66a
+5 -5
View File
@@ -35,8 +35,8 @@ func NewFastResolver(resolvers ...LookupNetIPer) *FastResolver {
} }
func (r FastResolver) LookupNetIP(ctx context.Context, network, host string) ([]netip.Addr, error) { func (r FastResolver) LookupNetIP(ctx context.Context, network, host string) ([]netip.Addr, error) {
masterNotInterested := make(chan struct{}) ctx, cl := context.WithCancel(ctx)
defer close(masterNotInterested) defer cl()
errors := make(chan error) errors := make(chan error)
success := make(chan []netip.Addr) success := make(chan []netip.Addr)
for _, res := range r.upstreams { for _, res := range r.upstreams {
@@ -45,12 +45,12 @@ func (r FastResolver) LookupNetIP(ctx context.Context, network, host string) ([]
if err == nil { if err == nil {
select { select {
case success <- addrs: case success <- addrs:
case <-masterNotInterested: case <-ctx.Done():
} }
} else { } else {
select { select {
case errors <-err: case errors <- err:
case <-masterNotInterested: case <-ctx.Done():
} }
} }
}(res) }(res)