civodul pushed a commit to branch master
in repository shepherd.
commit bf86a26854cc5c274d2eaa5e70ac9a82bcace29f
Author: Ludovic Courtès <[email protected]>
AuthorDate: Wed Jun 14 17:45:53 2023 +0200
service: 'start-service' returns #f when dependencies failed to start.
* modules/shepherd/service.scm (start-service): Return #f when PROBLEMS
is non-empty. Update docstring.
* doc/shepherd.texi (Interacting with Services): Update accordingly.
---
doc/shepherd.texi | 2 +-
modules/shepherd/service.scm | 14 ++++++++------
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/doc/shepherd.texi b/doc/shepherd.texi
index 75fcb49..6d7ddfd 100644
--- a/doc/shepherd.texi
+++ b/doc/shepherd.texi
@@ -943,7 +943,7 @@ The procedures below let you change the state of a service.
@deffn {Procedure} start-service @var{service} . @var{args}
Start @var{service} and its dependencies, passing @var{args} to its
-@code{start} method.
+@code{start} method. Return its running value, @code{#f} on failure.
@end deffn
@deffn {Procedure} stop-service @var{service} . @var{args}
diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
index 2559499..0980ac4 100644
--- a/modules/shepherd/service.scm
+++ b/modules/shepherd/service.scm
@@ -829,17 +829,19 @@ while starting ~a: ~s")
(define (start-service service . args)
"Start @var{service} and its dependencies, passing @var{args} to its
-@code{start} method."
+@code{start} method. Return its running value, @code{#f} on failure."
;; It is not running; go ahead and launch it.
(let ((problems
;; Resolve all dependencies.
(start-in-parallel (service-requirement service))))
(if (pair? problems)
- (for-each (lambda (problem)
- (local-output (l10n "Service ~a depends on ~a.")
- (service-canonical-name service)
- problem))
- problems)
+ (begin
+ (for-each (lambda (problem)
+ (local-output (l10n "Service ~a depends on ~a.")
+ (service-canonical-name service)
+ problem))
+ problems)
+ #f)
;; Start the service itself.
(let ((reply (make-channel)))
(put-message (service-control service) `(start ,reply))