Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarLockFile.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/StarLockFile.hpp')
-rw-r--r--source/core/StarLockFile.hpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/source/core/StarLockFile.hpp b/source/core/StarLockFile.hpp
new file mode 100644
index 0000000..af89c7f
--- /dev/null
+++ b/source/core/StarLockFile.hpp
@@ -0,0 +1,42 @@
+#ifndef STAR_LOCK_FILE_HPP
+#define STAR_LOCK_FILE_HPP
+
+#include "StarMaybe.hpp"
+#include "StarString.hpp"
+
+namespace Star {
+
+class LockFile {
+public:
+ // Convenience function, tries to acquire a lock, and if succesfull returns an
+ // already locked
+ // LockFile.
+ static Maybe<LockFile> acquireLock(String const& filename, int64_t lockTimeout = 1000);
+
+ LockFile(String const& filename);
+ LockFile(LockFile&& lockFile);
+ // Automatically unlocks.
+ ~LockFile();
+
+ LockFile(LockFile const&) = delete;
+ LockFile& operator=(LockFile const&) = delete;
+
+ LockFile& operator=(LockFile&& lockFile);
+
+ // Wait at most timeout time to acquire the file lock, and return true if the
+ // lock was acquired. If timeout is negative, wait forever.
+ bool lock(int64_t timeout = 0);
+ void unlock();
+
+ bool isLocked() const;
+
+private:
+ static int64_t const MaximumSleepMillis = 25;
+
+ String m_filename;
+ shared_ptr<void> m_handle;
+};
+
+}
+
+#endif