* In importPath() and exportPath(), lock the temporary directory to
prevent it from being deleted by the garbage collector.
This commit is contained in:
		
							parent
							
								
									f16fe2af8d
								
							
						
					
					
						commit
						b57189174f
					
				
					 1 changed files with 4 additions and 0 deletions
				
			
		| 
						 | 
					@ -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";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue