From 081bd3bd29c8af228c237a178c171fcdf05425cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Fri, 5 Feb 2016 13:07:57 +0100 Subject: [PATCH] service: shepherd: Guard against exceptions raised by 'start'. Fixes . Reported by Albin , Mark H Weaver, and Alex Kost. * gnu/services/shepherd.scm (shepherd-configuration-file)[config]: Guard against 'service-error?'. --- gnu/services/shepherd.scm | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm index 6cf15a5e00..207501cb1a 100644 --- a/gnu/services/shepherd.scm +++ b/gnu/services/shepherd.scm @@ -234,7 +234,8 @@ stored." (set! %load-compiled-path (cons #$compiled %load-compiled-path))) - (use-modules (system repl error-handling)) + (use-modules (srfi srfi-34) + (system repl error-handling)) ;; Arrange to spawn a REPL if loading one of FILES fails. This is ;; better than a kernel panic. @@ -246,7 +247,16 @@ stored." (setenv "PATH" "/run/current-system/profile/bin") (format #t "starting services...~%") - (for-each start + (for-each (lambda (service) + ;; In the Shepherd 0.3 the 'start' method can raise + ;; '&action-runtime-error' if it fails, so protect + ;; against it. (XXX: 'action-runtime-error?' is not + ;; exported is 0.3, hence 'service-error?'.) + (guard (c ((service-error? c) + (format (current-error-port) + "failed to start service '~a'~%" + service))) + (start service))) '#$(append-map shepherd-service-provision (filter shepherd-service-auto-start? services)))))