diff options
author | Christopher Baines <mail@cbaines.net> | 2024-04-02 12:04:23 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2024-04-02 12:16:15 +0100 |
commit | 65f92ca7013f2a3500f3fa66d6a47f02b253ef10 (patch) | |
tree | 84b3c595e06948577390a2919a6778fdeaa0475e /guix-data-service | |
parent | 15d436032a85897c77e4440f20fd0351b76156c0 (diff) | |
download | data-service-65f92ca7013f2a3500f3fa66d6a47f02b253ef10.tar data-service-65f92ca7013f2a3500f3fa66d6a47f02b253ef10.tar.gz |
Guard against logging failing
As I've seen this happening where there are errors writing to FD 1.
Diffstat (limited to 'guix-data-service')
-rw-r--r-- | guix-data-service/web/server.scm | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/guix-data-service/web/server.scm b/guix-data-service/web/server.scm index e86b97b..d0be4e4 100644 --- a/guix-data-service/web/server.scm +++ b/guix-data-service/web/server.scm @@ -49,12 +49,25 @@ #t) #f)) -(define (handler request body controller secret-key-base startup-completed +(define (handler request finished? + body controller secret-key-base startup-completed render-metrics) - (display - (format #f "~a ~a\n" - (request-method request) - (uri-path (request-uri request)))) + (with-exception-handler + (lambda (exn) + (with-exception-handler + (lambda _ #f) + (lambda () + (simple-format (current-error-port) + "exception when logging: ~A\n" exn)) + #:unwind? #t) + ;; If we can't log, exit + (signal-condition! finished?)) + (lambda () + (display + (format #f "~a ~a\n" + (request-method request) + (uri-path (request-uri request))))) + #:unwind? #t) (apply values (let-values (((request-components mime-types) (request->path-components-and-mime-type request))) @@ -152,7 +165,7 @@ port. Also, the port used can be changed by passing the --port option.\n" (lambda () (run-server/patched (lambda (request body) - (handler request body controller + (handler request finished? body controller secret-key-base startup-completed render-metrics)) |