(address . guix-patches@gnu.org)
When working on the Shepherd, I found that in the build containers
processes don't get reaped by pid 1. See
caused (and will cause) the Shepherd's tests to fail on some
systems.
Our guile-builder script should handle SIGCHLD and then use
waitpid to reap the child processes. Here's my attempt at a patch
to do that.
I haven't been able to build anything with it because the computer
I'm currently on is laughably slow. If someone else can check that
you can still build with it I'd really appreciate it.
From 7c66818570a139fc4e7b11de34d07c76ebdc6bac Mon Sep 17 00:00:00 2001
From: Carlo Zancanaro <carlo@zancanaro.id.au>
Date: Mon, 26 Mar 2018 22:08:26 +1100
Subject: [PATCH] guix: Reap finished child processes in build containers.
* guix/derivations (build-expression->derivation)[prologue]: Handle SIGCHLD
and reap child processes when they finish.
---
guix/derivations.scm | 11 +++++++++++
1 file changed, 11 insertions(+)
Toggle diff (24 lines)
diff --git a/guix/derivations.scm b/guix/derivations.scm
index da686e89e..80787e99e 100644
--- a/guix/derivations.scm
+++ b/guix/derivations.scm
@@ -1180,6 +1180,17 @@ ALLOWED-REFERENCES, DISALLOWED-REFERENCES, LOCAL-BUILD?, and SUBSTITUTABLE?."
(filter module-form? exp))
(_ `(,exp)))
+ ;; The root process in the build container should reap
+ ;; processes that die, so handle SIGCHLD.
+ (sigaction SIGCHLD
+ (lambda ()
+ (let loop ()
+ (match (waitpid WAIT_ANY WNOHANG)
+ ((0 . _) #f)
+ ((pid . _) (loop))
+ (_ #f))))
+ SA_NOCLDSTOP)
+
(define %output (getenv "out"))
(define %outputs
(map (lambda (o)
--
2.16.2
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEE1lpncq7JnOkt+LaeqdyPv9awIbwFAlq41pIACgkQqdyPv9aw
IbwkIBAAsY1CkKoTi0SFmbjGNXXx+PQQmvKBYn94UCRIl6VdhAFiShvNqo0wlDn3
EaRBhyJfC6ZPVTBGhJkdKY1Ar8xiL/9XYE/GpWKzCpITaccTpS1PwLO6A5dmXwUp
5jhhVOfVT1cQb7jSEWlDzee2gcnMUEWwoxM259/tJX3bJeYROnuhfQwZ4PFqBNWq
8njF6cdPVKh059A0Lvp4VUas7HnskHosdzoRzAsFjiwuQMtXX4eO4Vpb1fUsNocA
90JrgJZayu0PfvF3BG8qbkQJixSsgkbBB478L3kk/XUJJsjDCEAA0JYyXPEAWzE7
tmC6DQeZvxl9N7gVYFLk0gWdXXaFWwPieLYR7CvQwk+r9s9bY5b0/904cdx6ZcbY
UARtItvXJM3raYuFdG69Dtw/xkj906ljRr+USTcB5kBgrl6oZWh27bVKNVVefdOs
TNUFjx7gRUvuFPU6N5foxoJ5+STP4DEg75zqYleLVHhJ/kX7TprviA+aOik+uiN3
/C/WpoWPBxvb++2TYD0VML97OHZa8MML9DswhZvchY2PHHkFfmCrJAYjTj/gHje+
FfRODwEj+EiqTNRnATyFFKzcIRPQkpWyytPbk6T/tq5HonzfD1bmTDTeZY7A4Orh
5gC3Z711PvfLe+N/9JZHBAwSel8sFHyrGw8cv161vxtn2llQlSY=
=XRYr
-----END PGP SIGNATURE-----