ExfReleasePushLockExclusive
VOID __stdcall ExfReleasePushLockExclusive(_EX_PUSH_LOCK *PushLock){
signed __int64 v1;
signed __int64 v2;
__int64 v3;
signed __int64 v4;
signed __int64 v5;
v1 = _InterlockedCompareExchange64(&PushLock->_bf_0, 0i64, 1i64);
if( v1 != 1 )
{
do
{
v2 = v1 & 6;
v3 = 3i64;
if( v2 != 2 )
v3 = -1i64;
v4 = v1 + v3;
v5 = v1;
v1 = _InterlockedCompareExchange64(&PushLock->_bf_0, v4, v1);
}
while( v5 != v1 );
if( v2 == 2 )
ExpWakePushLock(PushLock, (_EX_PUSH_LOCK)v4);
}
}Referenced by:
ExfAcquireReleasePushLockExclusive
ExfReleasePushLock