From 023dcadc34351ed56a8ded24db00cdebcf21ba2a Mon Sep 17 00:00:00 2001 From: DarthSim Date: Wed, 8 May 2019 20:37:26 +0600 Subject: [PATCH] Better stacktrace of processing errorf --- errors.go | 11 +++++++---- process.go | 2 +- server.go | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/errors.go b/errors.go index 5b1d2fad..ac84b8f8 100644 --- a/errors.go +++ b/errors.go @@ -20,14 +20,17 @@ func newError(status int, msg string, pub string) *imgproxyError { return &imgproxyError{status, msg, pub} } -func newUnexpectedError(err error, skip int) *imgproxyError { - msg := fmt.Sprintf("Unexpected error: %s\n%s", err, stacktrace(skip+1)) - return &imgproxyError{500, msg, "Internal error"} +func newUnexpectedError(msg string, skip int) *imgproxyError { + return &imgproxyError{ + 500, + fmt.Sprintf("Unexpected error: %s\n%s", msg, stacktrace(skip+3)), + "Internal error", + } } func stacktrace(skip int) string { callers := make([]uintptr, 10) - n := runtime.Callers(skip+1, callers) + n := runtime.Callers(skip, callers) lines := make([]string, n) for i, pc := range callers[:n] { diff --git a/process.go b/process.go index 2000a547..caccf4f3 100644 --- a/process.go +++ b/process.go @@ -1048,5 +1048,5 @@ func vipsApplyWatermark(img **C.VipsImage, opts *watermarkOptions) error { } func vipsError() error { - return errors.New(C.GoString(C.vips_error_buffer())) + return newUnexpectedError(C.GoString(C.vips_error_buffer()), 1) } diff --git a/server.go b/server.go index 644977a7..f8dbe00c 100644 --- a/server.go +++ b/server.go @@ -240,7 +240,7 @@ func (h *httpHandler) ServeHTTP(rw http.ResponseWriter, r *http.Request) { if ierr, ok := err.(*imgproxyError); ok { respondWithError(reqID, rw, ierr) } else { - respondWithError(reqID, rw, newUnexpectedError(err, 4)) + respondWithError(reqID, rw, newUnexpectedError(err.Error(), 3)) } } else { panic(rerr)