* In importPath() and exportPath(), lock the temporary directory to

prevent it from being deleted by the garbage collector.
This commit is contained in:
Eelco Dolstra 2010-06-14 08:34:48 +00:00
parent f16fe2af8d
commit b57189174f

View file

@ -873,6 +873,8 @@ void LocalStore::exportPath(const Path & path, bool sign,
writeInt(1, hashAndWriteSink); writeInt(1, hashAndWriteSink);
Path tmpDir = createTempDir(); Path tmpDir = createTempDir();
PathLocks tmpDirLock(singleton<PathSet, Path>(tmpDir));
tmpDirLock.setDeletion(true);
AutoDelete delTmp(tmpDir); AutoDelete delTmp(tmpDir);
Path hashFile = tmpDir + "/hash"; Path hashFile = tmpDir + "/hash";
writeFile(hashFile, printHash(hash)); writeFile(hashFile, printHash(hash));
@ -922,6 +924,8 @@ Path LocalStore::importPath(bool requireSignature, Source & source)
store path follows the archive data proper), and besides, we store path follows the archive data proper), and besides, we
don't know yet whether the signature is valid. */ don't know yet whether the signature is valid. */
Path tmpDir = createTempDir(nixStore); Path tmpDir = createTempDir(nixStore);
PathLocks tmpDirLock(singleton<PathSet, Path>(tmpDir));
tmpDirLock.setDeletion(true);
AutoDelete delTmp(tmpDir); /* !!! could be GC'ed! */ AutoDelete delTmp(tmpDir); /* !!! could be GC'ed! */
Path unpacked = tmpDir + "/unpacked"; Path unpacked = tmpDir + "/unpacked";