ExpOptimizePushLockList
VOID __stdcall ExpOptimizePushLockList(_EX_PUSH_LOCK *PushLock, _EX_PUSH_LOCK TopValue){
__int64 bf_0;
_QWORD *v4;
_QWORD *v5;
__int64 v6;
__int64 v7;
bf_0 = TopValue._bf_0;
if( (TopValue._bf_0 & 1) != 0 )
{
while( 1 )
{
v4 = (_QWORD *)(bf_0 & 0xFFFFFFFFFFFFFFF0ui64);
if( !*(_QWORD *)((bf_0 & 0xFFFFFFFFFFFFFFF0ui64) + 0x20) )
{
do
{
v5 = v4;
v4 = (_QWORD *)v4[3];
v4[5] = v5;
v6 = v4[4];
}
while( !v6 );
if( v4 != (_QWORD *)(bf_0 & 0xFFFFFFFFFFFFFFF0ui64) )
*(_QWORD *)((bf_0 & 0xFFFFFFFFFFFFFFF0ui64) + 0x20) = v6;
}
v7 = bf_0;
bf_0 = _InterlockedCompareExchange64(&PushLock->_bf_0, bf_0 - 4, bf_0);
if( v7 == bf_0 )
break;
if( (bf_0 & 1) == 0 )
goto LABEL_8;
}
}
else
{
LABEL_8:
ExpWakePushLock(PushLock, (_EX_PUSH_LOCK)bf_0);
}
}Referenced by:
ExfAcquirePushLockExclusiveEx
ExfAcquirePushLockSharedEx