* Remove lock files after building.
This commit is contained in:
parent
06208d1d86
commit
7a02d95418
|
@ -256,6 +256,11 @@ Path normaliseStoreExpr(const Path & _nePath, PathSet pending)
|
||||||
registerSuccessor(txn, nePath, nfPath);
|
registerSuccessor(txn, nePath, nfPath);
|
||||||
txn.commit();
|
txn.commit();
|
||||||
|
|
||||||
|
/* It is now safe to delete the lock files, since all future
|
||||||
|
lockers will see the successor; they will not create new lock
|
||||||
|
files with the same names as the old (unlinked) lock files. */
|
||||||
|
outputLocks.setDeletion(true);
|
||||||
|
|
||||||
return nfPath;
|
return nfPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,7 @@ static StringSet lockedPaths; /* !!! not thread-safe */
|
||||||
|
|
||||||
|
|
||||||
PathLocks::PathLocks(const PathSet & _paths)
|
PathLocks::PathLocks(const PathSet & _paths)
|
||||||
|
: deletePaths(false)
|
||||||
{
|
{
|
||||||
/* Note that `fds' is built incrementally so that the destructor
|
/* Note that `fds' is built incrementally so that the destructor
|
||||||
will only release those locks that we have already acquired. */
|
will only release those locks that we have already acquired. */
|
||||||
|
@ -85,6 +86,17 @@ PathLocks::~PathLocks()
|
||||||
for (list<int>::iterator i = fds.begin(); i != fds.end(); i++)
|
for (list<int>::iterator i = fds.begin(); i != fds.end(); i++)
|
||||||
close(*i);
|
close(*i);
|
||||||
|
|
||||||
for (Paths::iterator i = paths.begin(); i != paths.end(); i++)
|
for (Paths::iterator i = paths.begin(); i != paths.end(); i++) {
|
||||||
|
if (deletePaths)
|
||||||
|
/* This is not safe in general! */
|
||||||
|
if (unlink(i->c_str()) != 0)
|
||||||
|
throw SysError(format("removing lock file `%1%'") % *i);
|
||||||
lockedPaths.erase(*i);
|
lockedPaths.erase(*i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PathLocks::setDeletion(bool deletePaths)
|
||||||
|
{
|
||||||
|
this->deletePaths = deletePaths;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,10 +14,12 @@ class PathLocks
|
||||||
private:
|
private:
|
||||||
list<int> fds;
|
list<int> fds;
|
||||||
Paths paths;
|
Paths paths;
|
||||||
|
bool deletePaths;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PathLocks(const PathSet & _paths);
|
PathLocks(const PathSet & _paths);
|
||||||
~PathLocks();
|
~PathLocks();
|
||||||
|
void setDeletion(bool deletePaths);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue