]> Cypherpunks repositories - gostls13.git/commitdiff
net: report completed when context is done in cgoLookupIP and cgoLookupPTR
authorMateusz Poliwczak <mpoliwczak34@gmail.com>
Sat, 3 Dec 2022 13:50:45 +0000 (13:50 +0000)
committerGopher Robot <gobot@golang.org>
Fri, 27 Jan 2023 00:42:08 +0000 (00:42 +0000)
All the Lookup* methods that resolve hostnames eventually call lookupIP
or lookupHost method. When the order is selected to be hostLookupCGO
then lookupHost calls cgoLookupHost which internally calls cgoLookupIP
(the lookupIP directly calls cgoLookupIP).
When we provide a context that is cancelled after cgo call, then the
cgoLookupIP returns completed  == false, which caues the
lookupIP/lookupHost to fallback to the go resolver.
This fallback is unnecessary because our context is already cancelled.

The same thing can happen to LookupAddr.

Change-Id: Ifff7716c461f05d954ef43b5205865103558b410
GitHub-Last-Rev: 2ef2023e8c51cdd251986f79e94aba86a0722230
GitHub-Pull-Request: golang/go#57042
Reviewed-on: https://go-review.googlesource.com/c/go/+/454696
TryBot-Result: Gopher Robot <gobot@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
Reviewed-by: Ian Lance Taylor <iant@google.com>
src/net/cgo_unix.go

index 6a2c369c668d0d1dc279a6defe37390346fd1aed..38bf20cbb102fd8318cfb6e2b08835debf7fa30f 100644 (file)
@@ -222,7 +222,7 @@ func cgoLookupIP(ctx context.Context, network, name string) (addrs []IPAddr, err
        case r := <-result:
                return r.addrs, r.err, true
        case <-ctx.Done():
-               return nil, mapErr(ctx.Err()), false
+               return nil, mapErr(ctx.Err()), true
        }
 }
 
@@ -262,7 +262,7 @@ func cgoLookupPTR(ctx context.Context, addr string) (names []string, err error,
        case r := <-result:
                return r.names, r.err, true
        case <-ctx.Done():
-               return nil, mapErr(ctx.Err()), false
+               return nil, mapErr(ctx.Err()), true
        }
 }