environment: Correctly handle abnormal exits.

Fixes <http://bugs.gnu.org/21958>.

* guix/scripts/environment.scm (status->exit-code): New procedure.
(exit/status, primitive-exit/status): Use it.
* tests/guix-environment-container.sh: Add test.
This commit is contained in:
Ludovic Courtès 2015-11-21 22:24:45 +01:00
parent 6493fd0458
commit 82e64fc14e
2 changed files with 16 additions and 2 deletions

View file

@ -317,8 +317,15 @@ (define (input->requisites input)
(map input->requisites inputs))))
(return (delete-duplicates (concatenate reqs)))))
(define exit/status (compose exit status:exit-val))
(define primitive-exit/status (compose primitive-exit status:exit-val))
(define (status->exit-code status)
"Compute the exit code made from STATUS, a value as returned by 'waitpid',
and suitable for 'exit'."
;; See <bits/waitstatus.h>.
(or (status:exit-val status)
(logior #x80 (status:term-sig status))))
(define exit/status (compose exit status->exit-code))
(define primitive-exit/status (compose primitive-exit status->exit-code))
(define (launch-environment command inputs paths pure?)
"Run COMMAND in a new environment containing INPUTS, using the native search

View file

@ -81,3 +81,10 @@ grep $(guix build guile-bootstrap) $tmpdir/mounts
grep -e "$NIX_STORE_DIR/.*-bash" $tmpdir/mounts # bootstrap bash
rm $tmpdir/mounts
if guix environment --bootstrap --container \
--ad-hoc bootstrap-binaries -- kill -SEGV 2
then false;
else
test $? -gt 127
fi