| //===-- LockFileBase.h ------------------------------------------*- C++ -*-===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef LLDB_HOST_LOCKFILEBASE_H | |
| #define LLDB_HOST_LOCKFILEBASE_H | |
| #include "lldb/Utility/Status.h" | |
| #include <functional> | |
| namespace lldb_private { | |
| class LockFileBase { | |
| public: | |
| virtual ~LockFileBase() = default; | |
| bool IsLocked() const; | |
| Status WriteLock(const uint64_t start, const uint64_t len); | |
| Status TryWriteLock(const uint64_t start, const uint64_t len); | |
| Status ReadLock(const uint64_t start, const uint64_t len); | |
| Status TryReadLock(const uint64_t start, const uint64_t len); | |
| Status Unlock(); | |
| protected: | |
| using Locker = std::function<Status(const uint64_t, const uint64_t)>; | |
| LockFileBase(int fd); | |
| virtual bool IsValidFile() const; | |
| virtual Status DoWriteLock(const uint64_t start, const uint64_t len) = 0; | |
| virtual Status DoTryWriteLock(const uint64_t start, const uint64_t len) = 0; | |
| virtual Status DoReadLock(const uint64_t start, const uint64_t len) = 0; | |
| virtual Status DoTryReadLock(const uint64_t start, const uint64_t len) = 0; | |
| virtual Status DoUnlock() = 0; | |
| Status DoLock(const Locker &locker, const uint64_t start, const uint64_t len); | |
| int m_fd; // not owned. | |
| bool m_locked; | |
| uint64_t m_start; | |
| uint64_t m_len; | |
| }; | |
| } | |
| #endif |