From 4189b9faf07c073a2ca440becee07b6aa9c4e795 Mon Sep 17 00:00:00 2001 From: Mateusz Poliwczak Date: Wed, 21 Feb 2024 18:11:23 +0100 Subject: [PATCH] update Change-Id: If38c829b4a7d6e8044d4f67fd368cacfccc941c4 --- src/net/cgo_unix.go | 23 ++++++++++------------- src/net/lookup_windows.go | 14 +++++++------- 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/src/net/cgo_unix.go b/src/net/cgo_unix.go index 35980d16c7..82ec4441fc 100644 --- a/src/net/cgo_unix.go +++ b/src/net/cgo_unix.go @@ -43,19 +43,6 @@ func (eai addrinfoErrno) isAddrinfoErrno() {} // For the duration of the execution of the blocking function, the thread is 'acquired' using [acquireThread], // blocking might not be executed when the context gets cancelled early. func doBlockingWithCtx[T any](ctx context.Context, lookupName string, blocking func() (T, error)) (T, error) { - if ctx.Done() == nil { - // Context is non-cancellable, so there is no need - // to handle the error from acquireThread. - acquireThread(ctx) - defer releaseThread() - return blocking() - } - - type result struct { - res T - err error - } - if err := acquireThread(ctx); err != nil { var zero T return zero, &DNSError{ @@ -65,6 +52,16 @@ func doBlockingWithCtx[T any](ctx context.Context, lookupName string, blocking f } } + if ctx.Done() == nil { + defer releaseThread() + return blocking() + } + + type result struct { + res T + err error + } + res := make(chan result, 1) go func() { defer releaseThread() diff --git a/src/net/lookup_windows.go b/src/net/lookup_windows.go index bf05aaaed9..946622761c 100644 --- a/src/net/lookup_windows.go +++ b/src/net/lookup_windows.go @@ -209,7 +209,7 @@ func (r *Resolver) lookupPort(ctx context.Context, network, service string) (int return lookupPortMap(network, service) } - // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this. + // TODO(bradfitz): finish ctx plumbing if err := acquireThread(ctx); err != nil { return 0, &DNSError{ Name: network + "/" + service, @@ -278,7 +278,7 @@ func (r *Resolver) lookupCNAME(ctx context.Context, name string) (string, error) return r.goLookupCNAME(ctx, name, order, conf) } - // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this. + // TODO(bradfitz): finish ctx plumbing if err := acquireThread(ctx); err != nil { return "", &DNSError{ Name: name, @@ -309,7 +309,7 @@ func (r *Resolver) lookupSRV(ctx context.Context, service, proto, name string) ( if systemConf().mustUseGoResolver(r) { return r.goLookupSRV(ctx, service, proto, name) } - // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this. + // TODO(bradfitz): finish ctx plumbing if err := acquireThread(ctx); err != nil { return "", nil, &DNSError{ Name: name, @@ -345,7 +345,7 @@ func (r *Resolver) lookupMX(ctx context.Context, name string) ([]*MX, error) { if systemConf().mustUseGoResolver(r) { return r.goLookupMX(ctx, name) } - // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this. + // TODO(bradfitz): finish ctx plumbing. if err := acquireThread(ctx); err != nil { return nil, &DNSError{ Name: name, @@ -375,7 +375,7 @@ func (r *Resolver) lookupNS(ctx context.Context, name string) ([]*NS, error) { if systemConf().mustUseGoResolver(r) { return r.goLookupNS(ctx, name) } - // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this. + // TODO(bradfitz): finish ctx plumbing. if err := acquireThread(ctx); err != nil { return nil, &DNSError{ Name: name, @@ -404,7 +404,7 @@ func (r *Resolver) lookupTXT(ctx context.Context, name string) ([]string, error) if systemConf().mustUseGoResolver(r) { return r.goLookupTXT(ctx, name) } - // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this. + // TODO(bradfitz): finish ctx plumbing. if err := acquireThread(ctx); err != nil { return nil, &DNSError{ Name: name, @@ -438,7 +438,7 @@ func (r *Resolver) lookupAddr(ctx context.Context, addr string) ([]string, error return r.goLookupPTR(ctx, addr, order, conf) } - // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this. + // TODO(bradfitz): finish ctx plumbing. if err := acquireThread(ctx); err != nil { return nil, &DNSError{ Name: addr,