2
0
mirror of https://github.com/hibiken/asynq.git synced 2024-12-26 07:42:17 +08:00

feat(*): correct panic error (#758)

* error panic handling

* updated CHANGELOG.md file

* correct msg panic error (#5)

* correct msg panic error
This commit is contained in:
Trịnh Đức Bảo Linh(Kevin) 2024-05-06 12:46:19 +07:00 committed by GitHub
parent 2b632b93d5
commit 174008843d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -415,21 +415,19 @@ func (p *processor) queues() []string {
func (p *processor) perform(ctx context.Context, task *Task) (err error) { func (p *processor) perform(ctx context.Context, task *Task) (err error) {
defer func() { defer func() {
if x := recover(); x != nil { if x := recover(); x != nil {
errMsg := string(debug.Stack()) p.logger.Errorf("recovering from panic. See the stack trace below for details:\n%s", string(debug.Stack()))
p.logger.Errorf("recovering from panic. See the stack trace below for details:\n%s", errMsg)
_, file, line, ok := runtime.Caller(1) // skip the first frame (panic itself) _, file, line, ok := runtime.Caller(1) // skip the first frame (panic itself)
if ok && strings.Contains(file, "runtime/") { if ok && strings.Contains(file, "runtime/") {
// The panic came from the runtime, most likely due to incorrect // The panic came from the runtime, most likely due to incorrect
// map/slice usage. The parent frame should have the real trigger. // map/slice usage. The parent frame should have the real trigger.
_, file, line, ok = runtime.Caller(2) _, file, line, ok = runtime.Caller(2)
} }
var errMsg string
// Include the file and line number info in the error, if runtime.Caller returned ok. // Include the file and line number info in the error, if runtime.Caller returned ok.
if ok { if ok {
err = fmt.Errorf("panic [%s:%d]: %v", file, line, x) errMsg = fmt.Sprintf("panic [%s:%d]: %v", file, line, x)
} else { } else {
err = fmt.Errorf("panic: %v", x) errMsg = fmt.Sprintf("panic: %v", x)
} }
err = &errors.PanicError{ err = &errors.PanicError{
ErrMsg: errMsg, ErrMsg: errMsg,