in xray/capture.go [18:49]
func Capture(ctx context.Context, name string, fn func(context.Context) error) (err error) {
c, seg := BeginSubsegment(ctx, name)
defer func() {
if seg != nil {
seg.Close(err)
} else {
cfg := GetRecorder(ctx)
failedMessage := fmt.Sprintf("failed to end subsegment: subsegment '%v' cannot be found.", name)
if cfg != nil && cfg.ContextMissingStrategy != nil {
cfg.ContextMissingStrategy.ContextMissing(failedMessage)
} else {
globalCfg.ContextMissingStrategy().ContextMissing(failedMessage)
}
}
}()
defer func() {
if p := recover(); p != nil {
err = seg.ParentSegment.GetConfiguration().ExceptionFormattingStrategy.Panicf("%v", p)
panic(p)
}
}()
if c == nil && seg == nil {
err = fn(ctx)
} else {
err = fn(c)
}
return err
}