mirror of
https://github.com/NixOS/nix
synced 2025-06-25 06:31:14 +02:00
* nix-store, nix-instantiate: added an option `--add-root' to
immediately add the result as a permanent GC root. This is the only way to prevent a race with the garbage collector. For instance, the old style ln -s $(nix-store -r $(nix-instantiate foo.nix)) \ /nix/var/nix/gcroots/result has two time windows in which the garbage collector can interfere (by GC'ing the derivation and the output, respectively). On the other hand, nix-store --add-root /nix/var/nix/gcroots/result -r \ $(nix-instantiate --add-root /nix/var/nix/gcroots/drv \ foo.nix) is safe. * nix-build: use `--add-root' to prevent GC races.
This commit is contained in:
parent
a6b65fd5e1
commit
dcc37c236c
11 changed files with 165 additions and 17 deletions
|
@ -10,6 +10,9 @@ fi
|
|||
extraArgs=
|
||||
noLink=
|
||||
|
||||
userName=$USER
|
||||
if test -z "$username"; then userName="unknown"; fi
|
||||
|
||||
for i in "$@"; do
|
||||
case "$i" in
|
||||
--no-link)
|
||||
|
@ -19,11 +22,15 @@ for i in "$@"; do
|
|||
extraArgs="$extraArgs $i"
|
||||
;;
|
||||
*)
|
||||
storeExprs=$(@bindir@/nix-instantiate "$i")
|
||||
storeExprs=$(@bindir@/nix-instantiate \
|
||||
--add-root "@localstatedir@/nix/gcroots/nix-build/$userName-drv" \
|
||||
"$i")
|
||||
for j in $storeExprs; do
|
||||
echo "store expression is $j" >&2
|
||||
done
|
||||
outPaths=$(@bindir@/nix-store -rv $extraArgs $storeExprs)
|
||||
outPaths=$(@bindir@/nix-store \
|
||||
--add-root "@localstatedir@/nix/gcroots/nix-build/$userName-out" \
|
||||
-rv $extraArgs $storeExprs)
|
||||
for j in $outPaths; do
|
||||
echo "$j"
|
||||
if test -z "$noLink"; then
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue