aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2005-02-01 12:36:25 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2005-02-01 12:36:25 +0000
commitdcc37c236c66ba463bd61fec23d046485d8a412f (patch)
treeb1a34feaf2a9a0ca0e0bad89c1671289de9e19d2 /scripts
parenta6b65fd5e107416588a6572a88518d8816abcb12 (diff)
* 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.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/nix-build.in11
1 files changed, 9 insertions, 2 deletions
diff --git a/scripts/nix-build.in b/scripts/nix-build.in
index 5ae591f35..33fbc61a3 100644
--- a/scripts/nix-build.in
+++ b/scripts/nix-build.in
@@ -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