Merge pull request '[GITEA] Actually recover from a panic in cron task' (#1912) from forgejo-bp-1911 into v1.21/forgejo

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/1912
This commit is contained in:
Gusted 2023-12-10 20:39:24 +00:00
commit bbdb47dfa1

View file

@ -84,13 +84,15 @@ func (t *Task) RunWithUser(doer *user_model.User, config Config) {
t.lock.Unlock() t.lock.Unlock()
defer func() { defer func() {
taskStatusTable.Stop(t.Name) taskStatusTable.Stop(t.Name)
}()
graceful.GetManager().RunWithShutdownContext(func(baseCtx context.Context) {
defer func() {
if err := recover(); err != nil { if err := recover(); err != nil {
// Recover a panic within the // Recover a panic within the execution of the task.
combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2)) combinedErr := fmt.Errorf("%s\n%s", err, log.Stack(2))
log.Error("PANIC whilst running task: %s Value: %v", t.Name, combinedErr) log.Error("PANIC whilst running task: %s Value: %v", t.Name, combinedErr)
} }
}() }()
graceful.GetManager().RunWithShutdownContext(func(baseCtx context.Context) {
// Store the time of this run, before the function is executed, so it // Store the time of this run, before the function is executed, so it
// matches the behavior of what the cron library does. // matches the behavior of what the cron library does.
t.lock.Lock() t.lock.Lock()