diff options
Diffstat (limited to 'guix-build-coordinator/agent-messaging')
-rw-r--r-- | guix-build-coordinator/agent-messaging/http/server.scm | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/guix-build-coordinator/agent-messaging/http/server.scm b/guix-build-coordinator/agent-messaging/http/server.scm index c9d70d6..a8e0d46 100644 --- a/guix-build-coordinator/agent-messaging/http/server.scm +++ b/guix-build-coordinator/agent-messaging/http/server.scm @@ -457,16 +457,21 @@ port. Also, the port used can be changed by passing the --port option.\n" "not-found" #:code 404)))) - (call-with-error-handling - controller-thunk - #:on-error 'backtrace - #:post-error (lambda args - (match method-and-path-components - ((method path-components ...) - (simple-format - (current-error-port) - "error: when processing: /~A ~A\n" - method (string-join path-components "/")))) - (render-json - `((error . ,(simple-format #f "~A" args))) - #:code 500)))) + (with-exception-handler + (lambda (exn) + (match method-and-path-components + ((method path-components ...) + (simple-format + (current-error-port) + "error: when processing: /~A ~A\n" + method (string-join path-components "/")))) + (if (agent-error? exn) + (render-json + `((error . ,(agent-error-details exn))) + #:code 400) + (render-json + `((error . ,(simple-format #f "~A" exn))) + #:code 500))) + controller-thunk + #:unwind? #t)) + |