1
0
Fork 0
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:
Dylan Green 2024-04-22 10:08:10 -05:00 committed by GitHub
parent e1fd0e0a8c
commit aa165301d1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 178 additions and 62 deletions

View file

@ -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);
}
};
}