in core/base/entry.go [84:116]
func (e *SentinelEntry) Exit(exitOps ...ExitOption) {
var options = ExitOptions{
err: nil,
}
for _, opt := range exitOps {
opt(&options)
}
ctx := e.ctx
if ctx == nil {
return
}
if options.err != nil {
ctx.SetError(options.err)
}
e.exitCtl.Do(func() {
defer func() {
if err := recover(); err != nil {
logging.Error(errors.Errorf("%+v", err), "Sentinel internal panic in SentinelEntry.Exit()")
}
if e.sc != nil {
e.sc.RefurbishContext(ctx)
}
}()
for _, handler := range e.exitHandlers {
if err := handler(e, ctx); err != nil {
logging.Error(err, "Fail to execute exitHandler in SentinelEntry.Exit()", "resource", e.Resource().Name())
}
}
if e.sc != nil {
e.sc.exit(ctx)
}
})
}