From d44325295e98f09b26da8de565f6176b3cb6aa95 Mon Sep 17 00:00:00 2001 From: Brad Fitzpatrick Date: Mon, 9 Mar 2020 21:04:08 -0700 Subject: [PATCH] net/dnscache: initialize the single Resolver more directly --- net/dnscache/dnscache.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/net/dnscache/dnscache.go b/net/dnscache/dnscache.go index 1ddab581f..3aebbc776 100644 --- a/net/dnscache/dnscache.go +++ b/net/dnscache/dnscache.go @@ -17,20 +17,22 @@ import ( "golang.org/x/sync/singleflight" ) -var single = func() *Resolver { - r := &Resolver{ - Forward: &net.Resolver{PreferGo: true}, - } +var single = &Resolver{ + Forward: &net.Resolver{PreferGo: preferGoResolver()}, +} +func preferGoResolver() bool { // There does not appear to be a local resolver running // on iOS, and NetworkExtension is good at isolating DNS. // So do not use the Go resolver on macOS/iOS. if runtime.GOOS == "darwin" { - r.Forward.PreferGo = false + return false } - return r -}() + // Otherwise, the Go resolver is fine and slightly preferred + // since it's lighter, not using cgo calls & threads. + return true +} // Get returns a caching Resolver singleton. func Get() *Resolver { return single }