aboutsummaryrefslogtreecommitdiff
path: root/guix-data-service
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2024-04-02 12:04:23 +0100
committerChristopher Baines <mail@cbaines.net>2024-04-02 12:16:15 +0100
commit65f92ca7013f2a3500f3fa66d6a47f02b253ef10 (patch)
tree84b3c595e06948577390a2919a6778fdeaa0475e /guix-data-service
parent15d436032a85897c77e4440f20fd0351b76156c0 (diff)
downloaddata-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.scm25
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))