Ensure that Perl processes delete their entry in the temproots directory

By moving the destructor object to libstore.so, it's also run when
download-using-manifests and nix-prefetch-url exit.  This prevents
them from cluttering /nix/var/nix/temproots with stale files.
This commit is contained in:
Eelco Dolstra 2012-03-13 17:07:49 +01:00
parent b461721f17
commit bd50c01972
4 changed files with 12 additions and 17 deletions

View file

@ -90,12 +90,6 @@ static void setLogType(string lt)
}
RemoveTempRoots::~RemoveTempRoots()
{
removeTempRoots();
}
static bool showTrace = false;
@ -217,10 +211,6 @@ static void initAndRun(int argc, char * * argv)
verbosityDelta += queryIntSetting("verbosity", lvlInfo);
verbosity = (Verbosity) (verbosityDelta < 0 ? 0 : verbosityDelta);
/* Automatically clean up the temporary roots file when we
exit. */
RemoveTempRoots removeTempRoots __attribute__((unused));
run(remaining);
/* Close the Nix database. */

View file

@ -48,11 +48,6 @@ extern bool setuidMode;
extern volatile ::sig_atomic_t blockInt;
struct RemoveTempRoots
{
~RemoveTempRoots();
};
/* Exit code of the program. */
extern int exitCode;

View file

@ -214,6 +214,18 @@ void removeTempRoots()
}
/* Automatically clean up the temporary roots file when we exit. */
struct RemoveTempRoots
{
~RemoveTempRoots()
{
removeTempRoots();
}
};
static RemoveTempRoots autoRemoveTempRoots __attribute__((unused));
typedef boost::shared_ptr<AutoCloseFD> FDPtr;
typedef list<FDPtr> FDs;

View file

@ -584,8 +584,6 @@ static void performOp(unsigned int clientVersion,
static void processConnection()
{
RemoveTempRoots removeTempRoots __attribute__((unused));
canSendStderr = false;
myPid = getpid();
writeToStderr = tunnelStderr;