missing file :)
Former-commit-id: 19061fe04f22dc2dcb4547a4c74eccfb89cae785
This commit is contained in:
parent
d5b47e6997
commit
a849655efd
61
src/aelocker.h
Normal file
61
src/aelocker.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
class AeLocker
|
||||||
|
{
|
||||||
|
bool m_fArmed = false;
|
||||||
|
|
||||||
|
public:
|
||||||
|
AeLocker()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void arm(client *c) // if a client is passed, then the client is already locked
|
||||||
|
{
|
||||||
|
if (c != nullptr)
|
||||||
|
{
|
||||||
|
serverAssert(!m_fArmed);
|
||||||
|
serverAssert(c->lock.fOwnLock());
|
||||||
|
|
||||||
|
bool fClientLocked = true;
|
||||||
|
while (!aeTryAcquireLock())
|
||||||
|
{
|
||||||
|
if (fClientLocked) c->lock.unlock();
|
||||||
|
fClientLocked = false;
|
||||||
|
aeAcquireLock();
|
||||||
|
if (!c->lock.try_lock())
|
||||||
|
{
|
||||||
|
aeReleaseLock();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_fArmed = true;
|
||||||
|
}
|
||||||
|
else if (!m_fArmed)
|
||||||
|
{
|
||||||
|
m_fArmed = true;
|
||||||
|
aeAcquireLock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void disarm()
|
||||||
|
{
|
||||||
|
serverAssert(m_fArmed);
|
||||||
|
m_fArmed = false;
|
||||||
|
aeReleaseLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isArmed() const
|
||||||
|
{
|
||||||
|
return m_fArmed;
|
||||||
|
}
|
||||||
|
|
||||||
|
~AeLocker()
|
||||||
|
{
|
||||||
|
if (m_fArmed)
|
||||||
|
aeReleaseLock();
|
||||||
|
}
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user