Change-Id: If38c829b4a7d6e8044d4f67fd368cacfccc941c4
This commit is contained in:
Mateusz Poliwczak 2024-02-21 18:11:23 +01:00
parent cfc47684a6
commit 4189b9faf0
2 changed files with 17 additions and 20 deletions

View file

@ -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()

View file

@ -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,