beegfs/meta/source/session/EntryLockStore.cpp
2025-08-10 01:34:16 +02:00

46 lines
1.2 KiB
C++

#include "EntryLockStore.h"
ParentNameLockData* EntryLockStore::lock(const std::string& parentID, const std::string& name)
{
ParentNameLockData& lock = parentNameLocks.getLockFor(
std::pair<const std::string&, const std::string&>(parentID, name) );
lock.getLock().lock();
return &lock;
}
FileIDLockData* EntryLockStore::lock(const std::string& fileID, const bool writeLock)
{
FileIDLockData& lock = fileLocks.getLockFor(fileID);
if(writeLock)
lock.getLock().writeLock();
else
lock.getLock().readLock();
return &lock;
}
HashDirLockData* EntryLockStore::lock(std::pair<unsigned, unsigned> hashDir)
{
HashDirLockData& lock = hashDirLocks.getLockFor(hashDir);
lock.getLock().lock();
return &lock;
}
void EntryLockStore::unlock(ParentNameLockData* parentNameLockData)
{
parentNameLockData->getLock().unlock();
parentNameLocks.putLock(*parentNameLockData);
}
void EntryLockStore::unlock(FileIDLockData* fileIDLockData)
{
fileIDLockData->getLock().unlock();
fileLocks.putLock(*fileIDLockData);
}
void EntryLockStore::unlock(HashDirLockData* hashDirLockData)
{
hashDirLockData->getLock().unlock();
hashDirLocks.putLock(*hashDirLockData);
}