1// build -gcflags=-l=4 2 3// Copyright 2023 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7package p 8 9type Interface interface { 10 MonitoredResource() (resType string, labels map[string]string) 11 Done() 12} 13 14func Autodetect() Interface { 15 return func() Interface { 16 Do(func() { 17 var ad, gd Interface 18 19 go func() { 20 defer gd.Done() 21 ad = aad() 22 }() 23 go func() { 24 defer ad.Done() 25 gd = aad() 26 defer func() { recover() }() 27 }() 28 29 autoDetected = ad 30 if gd != nil { 31 autoDetected = gd 32 } 33 }) 34 return autoDetected 35 }() 36} 37 38var autoDetected Interface 39var G int 40 41type If int 42 43func (x If) MonitoredResource() (resType string, labels map[string]string) { 44 return "", nil 45} 46 47//go:noinline 48func (x If) Done() { 49 G++ 50} 51 52//go:noinline 53func Do(fn func()) { 54 fn() 55} 56 57//go:noinline 58func aad() Interface { 59 var x If 60 return x 61} 62