Path: blob/main/contrib/llvm-project/lldb/source/Host/common/LockFileBase.cpp
39606 views
//===-- LockFileBase.cpp --------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Host/LockFileBase.h"910using namespace lldb;11using namespace lldb_private;1213static Status AlreadyLocked() { return Status("Already locked"); }1415static Status NotLocked() { return Status("Not locked"); }1617LockFileBase::LockFileBase(int fd)18: m_fd(fd), m_locked(false), m_start(0), m_len(0) {}1920bool LockFileBase::IsLocked() const { return m_locked; }2122Status LockFileBase::WriteLock(const uint64_t start, const uint64_t len) {23return DoLock([&](const uint64_t start,24const uint64_t len) { return DoWriteLock(start, len); },25start, len);26}2728Status LockFileBase::TryWriteLock(const uint64_t start, const uint64_t len) {29return DoLock([&](const uint64_t start,30const uint64_t len) { return DoTryWriteLock(start, len); },31start, len);32}3334Status LockFileBase::ReadLock(const uint64_t start, const uint64_t len) {35return DoLock([&](const uint64_t start,36const uint64_t len) { return DoReadLock(start, len); },37start, len);38}3940Status LockFileBase::TryReadLock(const uint64_t start, const uint64_t len) {41return DoLock([&](const uint64_t start,42const uint64_t len) { return DoTryReadLock(start, len); },43start, len);44}4546Status LockFileBase::Unlock() {47if (!IsLocked())48return NotLocked();4950const auto error = DoUnlock();51if (error.Success()) {52m_locked = false;53m_start = 0;54m_len = 0;55}56return error;57}5859bool LockFileBase::IsValidFile() const { return m_fd != -1; }6061Status LockFileBase::DoLock(const Locker &locker, const uint64_t start,62const uint64_t len) {63if (!IsValidFile())64return Status("File is invalid");6566if (IsLocked())67return AlreadyLocked();6869const auto error = locker(start, len);70if (error.Success()) {71m_locked = true;72m_start = start;73m_len = len;74}7576return error;77}787980