diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-02-01 12:36:25 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-02-01 12:36:25 +0000 |
commit | dcc37c236c66ba463bd61fec23d046485d8a412f (patch) | |
tree | b1a34feaf2a9a0ca0e0bad89c1671289de9e19d2 /scripts | |
parent | a6b65fd5e107416588a6572a88518d8816abcb12 (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.in | 11 |
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 |