diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-02-01T12·36+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-02-01T12·36+0000 |
commit | dcc37c236c66ba463bd61fec23d046485d8a412f (patch) | |
tree | b1a34feaf2a9a0ca0e0bad89c1671289de9e19d2 /src/libmain/shared.cc | |
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 'src/libmain/shared.cc')
-rw-r--r-- | src/libmain/shared.cc | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/libmain/shared.cc b/src/libmain/shared.cc index 23fcf28916be..5c994d7b47af 100644 --- a/src/libmain/shared.cc +++ b/src/libmain/shared.cc @@ -31,6 +31,28 @@ void sigintHandler(int signo) } +Path makeRootName(const Path & gcRoot, int & counter) +{ + counter++; + if (counter == 1) + return gcRoot; + else + return (format("%1%-%2%") % gcRoot % counter).str(); +} + + +void printGCWarning() +{ + static bool warned = false; + if (!warned) { + printMsg(lvlInfo, + "warning: you did not specify `--add-root'; " + "the result might be removed by the garbage collector"); + warned = true; + } +} + + void setLogType(string lt) { if (lt == "pretty") logType = ltPretty; @@ -183,7 +205,7 @@ static void initAndRun(int argc, char * * argv) /* Automatically clean up the temporary roots file when we exit. */ - RemoveTempRoots removeTempRoots; + RemoveTempRoots removeTempRoots; /* unused variable - don't remove */ run(remaining); } |