Subject: [bug#68357] [PATCH] shepherd: service: fix `unload all`

From: Ludovic Courtès <[email-masked]>
Date: Sun, 14 Jan 2024 22:33:18 +0100

Hi,

"zero@fedora" <[email-masked]> skribis:

> * modules/shepherd/service.scm: fix `unload all`

Thanks for the patch!

> -      (('unregister-all)                          ;no reply
> -       (let ((root (cdr (vhash-assq 'root registered))))
> -         (loop (fold (cut vhash-consq <> root <>)
> -                     vlist-null
> -                     (service-provision root)))))
>        (('lookup name reply)
>         ;; Look up NAME and return it, or #f, to REPLY.
>         (put-message reply
> @@ -2638,8 +2633,11 @@ requested to be removed."
>    (let ((name (string->symbol service-name)))
>      (cond ((eq? name 'all)
>             ;; Special 'remove all' case.
> -           (put-message (current-registry-channel) `(unregister-all))
> -           #t)
> +           (unregister-services
> +             (filter
> +               (lambda (sv)
> +                 (not (eq? (service-canonical-name sv) 'root)))
> +               (service-list))))

Do I get it right that the problem with the current implementation is
that services are removed from the registry but not actually stopped?

Ludo’.