~ruther/guix-local

081bd3bd29c8af228c237a178c171fcdf05425cf — Ludovic Courtès 10 years ago 1d6b7d5
service: shepherd: Guard against exceptions raised by 'start'.

Fixes <http://bugs.gnu.org/22548>.
Reported by Albin <albin@fripost.org>, Mark H Weaver, and Alex Kost.

* gnu/services/shepherd.scm (shepherd-configuration-file)[config]: Guard
against 'service-error?'.
1 files changed, 12 insertions(+), 2 deletions(-)

M gnu/services/shepherd.scm
M gnu/services/shepherd.scm => gnu/services/shepherd.scm +12 -2
@@ 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)))))