1 //===-- LockFileBase.h ------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_Host_LockFileBase_h_ 11 #define liblldb_Host_LockFileBase_h_ 12 13 #include "lldb/Utility/Status.h" 14 15 #include <functional> 16 17 namespace lldb_private { 18 19 class LockFileBase { 20 public: 21 virtual ~LockFileBase() = default; 22 23 bool IsLocked() const; 24 25 Status WriteLock(const uint64_t start, const uint64_t len); 26 Status TryWriteLock(const uint64_t start, const uint64_t len); 27 28 Status ReadLock(const uint64_t start, const uint64_t len); 29 Status TryReadLock(const uint64_t start, const uint64_t len); 30 31 Status Unlock(); 32 33 protected: 34 using Locker = std::function<Status(const uint64_t, const uint64_t)>; 35 36 LockFileBase(int fd); 37 38 virtual bool IsValidFile() const; 39 40 virtual Status DoWriteLock(const uint64_t start, const uint64_t len) = 0; 41 virtual Status DoTryWriteLock(const uint64_t start, const uint64_t len) = 0; 42 43 virtual Status DoReadLock(const uint64_t start, const uint64_t len) = 0; 44 virtual Status DoTryReadLock(const uint64_t start, const uint64_t len) = 0; 45 46 virtual Status DoUnlock() = 0; 47 48 Status DoLock(const Locker &locker, const uint64_t start, const uint64_t len); 49 50 int m_fd; // not owned. 51 bool m_locked; 52 uint64_t m_start; 53 uint64_t m_len; 54 }; 55 } 56 57 #endif 58