in internal/util/flow_util.go [34:60]
func GoAndWait(handlers ...func() error) error {
var (
wg sync.WaitGroup
once sync.Once
err error
)
for _, f := range handlers {
wg.Add(1)
go func(handler func() error) {
defer func() {
if e := recover(); e != nil {
buf := make([]byte, PanicBufLen)
buf = buf[:runtime.Stack(buf, false)]
log.Errorf("[PANIC]%v\n%s\n", e, buf)
}
wg.Done()
}()
if e := handler(); e != nil {
once.Do(func() {
err = e
})
}
}(f)
}
wg.Wait()
return err
}