From e36d6ab24b7f405d191f7bf84f0db949c0ee72c0 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 13 Feb 2025 11:12:13 +0100 Subject: services: Use ‘spawn-command’ instead of ‘fork’ + ‘waitpid’. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes . This is more concise and more robust: these ‘waitpid’ calls would compete with those made by shepherd’s event loop upon SIGCHLD, and they could hang forever, as illustrated with ‘dhcp-client-service-type’ in . * gnu/services/databases.scm (postgresql-role-shepherd-service): Use ‘spawn-command’ instead of ‘fork+exec-command’ followed by ‘waitpid’. * gnu/services/networking.scm (dhcp-client-shepherd-service): Change ‘start’ to use ‘spawn-command’ instead of ‘fork+exec-command’ and * gnu/services/web.scm (patchwork-django-admin-gexp): Use ‘spawn-command’ instead of ‘primitive-fork’ + ‘waitpid’. Change-Id: I449290bfa46f8600e6ccdb5a6da990ad0cb7948c Reported-by: Tomas Volf <~@wolfsden.cz> --- gnu/services/databases.scm | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'gnu/services/databases.scm') diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm index e8a4acc996d..6530c6f0a12 100644 --- a/gnu/services/databases.scm +++ b/gnu/services/databases.scm @@ -1,6 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2015 David Thompson -;;; Copyright © 2015-2016, 2022-2023 Ludovic Courtès +;;; Copyright © 2015-2016, 2022-2023, 2025 Ludovic Courtès ;;; Copyright © 2016 Leo Famulari ;;; Copyright © 2017 Christopher Baines ;;; Copyright © 2018 Clément Lassieur @@ -448,12 +448,14 @@ rolname = '" ,name "')) as not_exists;\n" (one-shot? #t) (start #~(lambda args - (let ((pid (fork+exec-command - #$(postgresql-create-roles config) - #:user "postgres" - #:group "postgres" - #:log-file #$log))) - (zero? (cdr (waitpid pid)))))) + (zero? (spawn-command + #$(postgresql-create-roles config) + #:user "postgres" + #:group "postgres" + ;; XXX: As of Shepherd 1.0.2, #:log-file is not + ;; supported. + ;; #:log-file #$log + )))) (documentation "Create PostgreSQL roles."))))) (define postgresql-role-service-type -- cgit v1.3