mirror of
https://github.com/NixOS/nix
synced 2025-07-05 04:01:47 +02:00
Pathlocks Implementation for Windows (#10586)
Based on Volth's original port. Co-authored-by: volth <volth@volth.com>
This commit is contained in:
parent
e1fd0e0a8c
commit
aa165301d1
7 changed files with 178 additions and 62 deletions
|
@ -5,10 +5,26 @@
|
|||
|
||||
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.
|
||||
*/
|
||||
AutoCloseFD openLockFile(const Path & path, bool create);
|
||||
|
||||
/**
|
||||
* Delete an open lock file.
|
||||
*/
|
||||
void deleteLockFile(const Path & path, Descriptor desc);
|
||||
|
||||
enum LockType { ltRead, ltWrite, ltNone };
|
||||
|
||||
bool lockFile(Descriptor desc, LockType lockType, bool wait);
|
||||
|
||||
class PathLocks
|
||||
{
|
||||
private:
|
||||
typedef std::pair<int, Path> FDPair;
|
||||
typedef std::pair<Descriptor, Path> FDPair;
|
||||
std::list<FDPair> fds;
|
||||
bool deletePaths;
|
||||
|
||||
|
@ -24,6 +40,18 @@ public:
|
|||
void setDeletion(bool deletePaths);
|
||||
};
|
||||
|
||||
}
|
||||
struct FdLock
|
||||
{
|
||||
Descriptor desc;
|
||||
bool acquired = false;
|
||||
|
||||
#include "pathlocks-impl.hh"
|
||||
FdLock(Descriptor desc, LockType lockType, bool wait, std::string_view waitMsg);
|
||||
|
||||
~FdLock()
|
||||
{
|
||||
if (acquired)
|
||||
lockFile(desc, ltNone, false);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue