[bug#68357] shepherd: service: fix `unload all`
Commit Message
* modules/shepherd/service.scm: fix `unload all`
---
modules/shepherd/service.scm | 12 +++++-------
1 file changed, 5 insertions(+), 7 deletions(-)
Comments
Hi,
"zero@fedora" <shinyzero0@tilde.club> 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’.
Hi Ludo! Thanks for replying.
Yes, that was the problem. `herd reload root all` was leaving the
processes running and many of them crashed or had strange behaviour
after loading, so one had to kill them manually and then restart
the services.
Of course `herd unload root all` was the same.
Best wishes, Paul.
Hi!
"ShinyZero0" <shinyzero0@tilde.club> skribis:
> Yes, that was the problem. `herd reload root all` was leaving the
> processes running and many of them crashed or had strange behaviour
> after loading, so one had to kill them manually and then restart
> the services.
>
> Of course `herd unload root all` was the same.
>
> Best wishes, Paul.
Thanks for clarifying. I pushed something similar along with a test as
commit b7fcdad75dff73fb4a8f531d0834eb9a965bcfd6.
Ludo’.
@@ -1136,11 +1136,6 @@ requests arriving on @var{channel}."
(length lst))
(map service-canonical-name lst))
(loop registered))))
- (('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))))
(else
;; Removing only one service.
(match (lookup-service name)