LLVM 20.0.0git
Public Types | Public Member Functions | List of all members
llvm::LockFileManager Class Reference

Class that manages the creation of a lock file to aid implicit coordination between different processes. More...

#include "llvm/Support/LockFileManager.h"

Public Types

enum  LockFileState { LFS_Owned , LFS_Shared , LFS_Error }
 Describes the state of a lock file. More...
 
enum  WaitForUnlockResult { Res_Success , Res_OwnerDied , Res_Timeout }
 Describes the result of waiting for the owner to release the lock. More...
 

Public Member Functions

 LockFileManager (StringRef FileName)
 
 ~LockFileManager ()
 
LockFileState getState () const
 Determine the state of the lock file.
 
 operator LockFileState () const
 
WaitForUnlockResult waitForUnlock (const unsigned MaxSeconds=90)
 For a shared lock, wait until the owner releases the lock.
 
std::error_code unsafeRemoveLockFile ()
 Remove the lock file.
 
std::string getErrorMessage () const
 Get error message, or "" if there is no error.
 
void setError (const std::error_code &EC, StringRef ErrorMsg="")
 Set error and error message.
 

Detailed Description

Class that manages the creation of a lock file to aid implicit coordination between different processes.

The implicit coordination works by creating a ".lock" file alongside the file that we're coordinating for, using the atomicity of the file system to ensure that only a single process can create that ".lock" file. When the lock file is removed, the owning process has finished the operation.

Definition at line 27 of file LockFileManager.h.

Member Enumeration Documentation

◆ LockFileState

Describes the state of a lock file.

Enumerator
LFS_Owned 

The lock file has been created and is owned by this instance of the object.

LFS_Shared 

The lock file already exists and is owned by some other instance.

LFS_Error 

An error occurred while trying to create or find the lock file.

Definition at line 30 of file LockFileManager.h.

◆ WaitForUnlockResult

Describes the result of waiting for the owner to release the lock.

Enumerator
Res_Success 

The lock was released successfully.

Res_OwnerDied 

Owner died while holding the lock.

Res_Timeout 

Reached timeout while waiting for the owner to release the lock.

Definition at line 43 of file LockFileManager.h.

Constructor & Destructor Documentation

◆ LockFileManager()

LockFileManager::LockFileManager ( StringRef  FileName)

◆ ~LockFileManager()

LockFileManager::~LockFileManager ( )

Member Function Documentation

◆ getErrorMessage()

std::string LockFileManager::getErrorMessage ( ) const

Get error message, or "" if there is no error.

Definition at line 270 of file LockFileManager.cpp.

◆ getState()

LockFileManager::LockFileState LockFileManager::getState ( ) const

Determine the state of the lock file.

Definition at line 260 of file LockFileManager.cpp.

References LFS_Error, LFS_Owned, and LFS_Shared.

Referenced by operator LockFileState(), waitForUnlock(), and ~LockFileManager().

◆ operator LockFileState()

llvm::LockFileManager::operator LockFileState ( ) const
inline

Definition at line 77 of file LockFileManager.h.

References getState().

◆ setError()

void llvm::LockFileManager::setError ( const std::error_code &  EC,
StringRef  ErrorMsg = "" 
)
inline

Set error and error message.

Definition at line 92 of file LockFileManager.h.

Referenced by LockFileManager().

◆ unsafeRemoveLockFile()

std::error_code LockFileManager::unsafeRemoveLockFile ( )

Remove the lock file.

This may delete a different lock file than the one previously read if there is a race.

Definition at line 326 of file LockFileManager.cpp.

References llvm::sys::fs::remove().

◆ waitForUnlock()

LockFileManager::WaitForUnlockResult LockFileManager::waitForUnlock ( const unsigned  MaxSeconds = 90)

For a shared lock, wait until the owner releases the lock.

Total timeout for the file to appear is ~1.5 minutes.

Parameters
MaxSecondsthe maximum total wait time in seconds.

Definition at line 295 of file LockFileManager.cpp.

References llvm::sys::fs::access(), llvm::SmallString< InternalLen >::c_str(), llvm::sys::fs::Exist, llvm::sys::fs::exists(), getState(), LFS_Shared, llvm::no_such_file_or_directory, Res_OwnerDied, Res_Success, Res_Timeout, and llvm::ExponentialBackoff::waitForNextAttempt().


The documentation for this class was generated from the following files: