123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file Copyright.txt or https://cmake.org/licensing for details. */
- #ifndef cmFileLockPool_h
- #define cmFileLockPool_h
- #include "cmConfigure.h" // IWYU pragma: keep
- #include <string>
- #include <vector>
- class cmFileLock;
- class cmFileLockResult;
- class cmFileLockPool
- {
- CM_DISABLE_COPY(cmFileLockPool)
- public:
- cmFileLockPool();
- ~cmFileLockPool();
- //@{
- /**
- * @brief Function scope control.
- */
- void PushFunctionScope();
- void PopFunctionScope();
- //@}
- //@{
- /**
- * @brief File scope control.
- */
- void PushFileScope();
- void PopFileScope();
- //@}
- //@{
- /**
- * @brief Lock the file in given scope.
- * @param timeoutSec Lock timeout. If -1 try until success or fatal error.
- */
- cmFileLockResult LockFunctionScope(const std::string& filename,
- unsigned long timeoutSec);
- cmFileLockResult LockFileScope(const std::string& filename,
- unsigned long timeoutSec);
- cmFileLockResult LockProcessScope(const std::string& filename,
- unsigned long timeoutSec);
- //@}
- /**
- * @brief Unlock the file explicitly.
- */
- cmFileLockResult Release(const std::string& filename);
- private:
- bool IsAlreadyLocked(const std::string& filename) const;
- class ScopePool
- {
- CM_DISABLE_COPY(ScopePool)
- public:
- ScopePool();
- ~ScopePool();
- cmFileLockResult Lock(const std::string& filename,
- unsigned long timeoutSec);
- cmFileLockResult Release(const std::string& filename);
- bool IsAlreadyLocked(const std::string& filename) const;
- private:
- typedef std::vector<cmFileLock*> List;
- typedef List::iterator It;
- typedef List::const_iterator CIt;
- List Locks;
- };
- typedef std::vector<ScopePool*> List;
- typedef List::iterator It;
- typedef List::const_iterator CIt;
- List FunctionScopes;
- List FileScopes;
- ScopePool ProcessScope;
- };
- #endif // cmFileLockPool_h
|