ExfReleasePushLockExclusive

VOID __fastcall ExfReleasePushLockExclusive(volatile INT64 *a1){
  signed __int64 v1; 
  signed __int64 v2; 
  __int64 v3; 
  signed __int64 v4; 
  signed __int64 v5; 
  v1 = _InterlockedCompareExchange64(a1, 0i64, 1i64);
  if( v1 != 1 )
  {
    do
    {
      v2 = v1 & 6;
      v3 = 3i64;
      if( v2 != 2 )
        v3 = -1i64;
      v4 = v1 + v3;
      v5 = v1;
      v1 = _InterlockedCompareExchange64(a1, v4, v1);
    }
    while( v5 != v1 );
    if( v2 == 2 )
      ExpWakePushLock(a1, v4);
  }
}

Referenced by:

ExfAcquireReleasePushLockExclusive
ExfReleasePushLock