45 lines
		
	
	
	
		
			944 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			944 B
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include "types.hh"
 | 
						|
 | 
						|
 | 
						|
namespace nix {
 | 
						|
 | 
						|
 | 
						|
/* Open (possibly create) a lock file and return the file descriptor.
 | 
						|
   -1 is returned if create is false and the lock could not be opened
 | 
						|
   because it doesn't exist.  Any other error throws an exception. */
 | 
						|
int openLockFile(const Path & path, bool create);
 | 
						|
 | 
						|
/* Delete an open lock file. */
 | 
						|
void deleteLockFile(const Path & path, int fd);
 | 
						|
 | 
						|
enum LockType { ltRead, ltWrite, ltNone };
 | 
						|
 | 
						|
bool lockFile(int fd, LockType lockType, bool wait);
 | 
						|
 | 
						|
 | 
						|
class PathLocks 
 | 
						|
{
 | 
						|
private:
 | 
						|
    typedef std::pair<int, Path> FDPair;
 | 
						|
    list<FDPair> fds;
 | 
						|
    bool deletePaths;
 | 
						|
 | 
						|
public:
 | 
						|
    PathLocks();
 | 
						|
    PathLocks(const PathSet & paths,
 | 
						|
        const string & waitMsg = "");
 | 
						|
    bool lockPaths(const PathSet & _paths,
 | 
						|
        const string & waitMsg = "",
 | 
						|
        bool wait = true);
 | 
						|
    ~PathLocks();
 | 
						|
    void unlock();
 | 
						|
    void setDeletion(bool deletePaths);
 | 
						|
};
 | 
						|
 | 
						|
 | 
						|
bool pathIsLockedByMe(const Path & path);
 | 
						|
 | 
						|
 | 
						|
}
 |