From 1e3eff419ee6acff05e5acf5476cb39e0d29e0a4 Mon Sep 17 00:00:00 2001 From: Jakob L. Kreuze Date: Sat, 11 Jul 2026 16:28:50 -0400 Subject: Try to catch errors in the main thread --- weeb/main.scm | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/weeb/main.scm b/weeb/main.scm index fa4e9fc..7487f19 100644 --- a/weeb/main.scm +++ b/weeb/main.scm @@ -21,12 +21,15 @@ #:use-module (ice-9 regex) #:use-module (srfi srfi-1) #:use-module (srfi srfi-11) ;; Temporary, probably + #:use-module (srfi srfi-26) + #:use-module (system repl error-handling) #:use-module (weeb fcgi) #:use-module (weeb request) #:use-module (weeb response) #:use-module (weeb router) #:use-module (weeb struct) - #:export (weeb main)) + #:use-module (weeb sxml) + #:export (run-server)) (define status-codes '((100 . "Continue") @@ -125,21 +128,21 @@ (uri (getenv "REQUEST_URI"))) (make-struct method uri '() headers (fcgi-read)))) -(define (show-headers request) - (with-accessors (request headers) - (format #f "~a" headers))) +(define (handle-errors thunk) + (catch #t + (lambda () + (with-exception-handler + (lambda (exn) + (let ((captured-stack (make-stack #t))) + (throw 'custom-error-key exn captured-stack))) + thunk + #:unwind? #f)) + (lambda (key exn captured-stack) + (let ((stack-trace (call-with-output-string (cut display-backtrace captured-stack <>)))) + (list 500 stack-trace))))) -(define (show-message request message) - (format #f "~a" message)) - -(define-router router - ("/headers" (GET) show-headers) - ("/echo/:message:" (GET) show-message)) - -(define (run-server) +(define (run-server router) (while (zero? (fcgi-accept)) (let* ((request (receive-request)) (response (iter-routes request router))) (write-response (any->response response))))) - -(run-server) -- cgit v1.3