* Automatically remove temporary root files.

This commit is contained in:
Eelco Dolstra 2005-01-31 21:20:59 +00:00
parent 252c9c91ab
commit 207bdcbe86
3 changed files with 30 additions and 1 deletions

View file

@ -13,6 +13,7 @@ extern "C" {
} }
#include "globals.hh" #include "globals.hh"
#include "gc.hh"
#include "shared.hh" #include "shared.hh"
#include "config.h" #include "config.h"
@ -55,6 +56,15 @@ void checkStoreNotSymlink(Path path)
} }
struct RemoveTempRoots
{
~RemoveTempRoots()
{
removeTempRoots();
}
};
void initDerivationsHelpers(); void initDerivationsHelpers();
@ -171,6 +181,10 @@ static void initAndRun(int argc, char * * argv)
else remaining.push_back(arg); else remaining.push_back(arg);
} }
/* Automatically clean up the temporary roots file when we
exit. */
RemoveTempRoots removeTempRoots;
run(remaining); run(remaining);
} }

View file

@ -63,6 +63,15 @@ void addTempRoot(const Path & path)
} }
void removeTempRoots()
{
if (fdTempRoots != -1) {
fdTempRoots.close();
unlink(fnTempRoots.c_str());
}
}
typedef shared_ptr<AutoCloseFD> FDPtr; typedef shared_ptr<AutoCloseFD> FDPtr;
typedef list<FDPtr> FDs; typedef list<FDPtr> FDs;
@ -94,7 +103,8 @@ static void readTempRoots(PathSet & tempRoots, FDs & fds)
if (lockFile(*fd, ltWrite, false)) { if (lockFile(*fd, ltWrite, false)) {
printMsg(lvlError, format("removing stale temporary roots file `%1%'") printMsg(lvlError, format("removing stale temporary roots file `%1%'")
% path); % path);
/* !!! write token, unlink */ unlink(path.c_str());
writeFull(*fd, (const unsigned char *) "d", 1);
continue; continue;
} }

View file

@ -21,5 +21,10 @@ void collectGarbage(const PathSet & roots, GCAction action,
deadlock. */ deadlock. */
void addTempRoot(const Path & path); void addTempRoot(const Path & path);
/* Remove the temporary roots file for this process. Any temporary
root becomes garbage after this point unless it has been registered
as a (permanent) root. */
void removeTempRoots();
#endif /* !__GC_H */ #endif /* !__GC_H */