1
0
Fork 0
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:
Eelco Dolstra 2005-02-01 12:36:25 +00:00
parent a6b65fd5e1
commit dcc37c236c
11 changed files with 165 additions and 17 deletions

View file

@ -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