diff --git a/pool.go b/pool.go index 6ce03ee..f62f09e 100644 --- a/pool.go +++ b/pool.go @@ -160,8 +160,18 @@ func processRequest(request interface{}) { select { case <-req.ctx.Done(): case req.resultChan <- func() *jobResult { + var result jobResult + defer func() { + if p := recover(); p != nil { + result.Err = errors.Errorf("crashed, failed to process request: %s", p) + } + }() + data, err := req.pf(req.payload) - return &jobResult{Data: data, Err: err} + result.Data = data + result.Err = err + + return &result }(): } default: