diff --git a/src/cuirass/utils.scm b/src/cuirass/utils.scm index 56dfcede8cf5eefce9a695798c4b3ebef9d7d5ac..947bf71562922be6f4b19ab0b554baa921e7cb95 100644 --- a/src/cuirass/utils.scm +++ b/src/cuirass/utils.scm @@ -71,10 +71,19 @@ value." (let ((channel (make-channel))) (call-with-new-thread (lambda () - (call-with-values thunk - (lambda values - (put-message channel values))))) - (apply values (get-message channel)))) + (catch #t + (lambda () + (call-with-values thunk + (lambda values + (put-message channel `(values ,@values))))) + (lambda args + (put-message channel `(exception ,@args)))))) + + (match (get-message channel) + (('values . results) + (apply values results)) + (('exception . args) + (apply throw args))))) (define-syntax-rule (non-blocking exp ...) "Evalaute EXP... in a separate thread so that it doesn't block the execution