WbReleaseLeastRecentlyUsedHeapExecutedBlocks

VOID __stdcall WbReleaseLeastRecentlyUsedHeapExecutedBlocks(INT64 a1, INT64 a2){
  int v2; 
  _EX_PUSH_LOCK *v3; 
  _QWORD *v5; 
  _EX_PUSH_LOCK *v6; 
  _ETHREAD *CurrentThread; 
  _BYTE *v8; 
  _BYTE *v9; 
  _BYTE *v10; 
  _BYTE *v11; 
  _QWORD *v12; 
  __int64 v13; 
  __int64 v14; 
  char v15; 
  __int64 v16; 
  char v17; 
  __int64 v18; 

  if( (int)a2 > 0 )
  {
    v2 = a2;
    v3 = (_EX_PUSH_LOCK *)(a1 + 80);
    v5 = (_QWORD *)(a1 + 64);
    v6 = (_EX_PUSH_LOCK *)(a1 + 48);
    do
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --v2;
      --CurrentThread->Tcb.SpecialApcDisable;
      v8 = KeAbPreAcquire(v6, 0i64, 0i64);
      v9 = v8;
      if( _interlockedbittestandset64((volatile signed __int32 *)v6, 0i64) )
        ExfAcquirePushLockExclusiveEx(v6, v8, v6);
      if( v9 )
        v9[26] |= 1u;
      v10 = KeAbPreAcquire(v3, 0i64, 0i64);
      v11 = v10;
      if( _interlockedbittestandset64((volatile signed __int32 *)v3, 0i64) )
        ExfAcquirePushLockExclusiveEx(v3, v10, v3);
      if( v11 )
        v11[26] |= 1u;
      v12 = (_QWORD *)*v5;
      if( (_QWORD *)*v5 == v5 )
      {
        v12 = 0i64;
      }
      else
      {
        if( (_QWORD *)v12[1] != v5 || (v13 = *v12, *(_QWORD **)(*v12 + 8i64) != v12) )
          __fastfail(3u);
        *v5 = v13;
        *(_QWORD *)(v13 + 8) = v5;
      }
      v14 = 0i64;
      if( v12 )
      {
        *((_DWORD *)v12 + 4) &= ~1u;
        v14 = (__int64)v12;
      }
      v15 = _InterlockedExchangeAdd64(&v3->_bf_0, 0xFFFFFFFFFFFFFFFFui64);
      if( (v15 & 2) != 0 && (v15 & 4) == 0 )
        ExfTryToWakePushLock(v3);
      KeAbPostRelease(v3);
      if( v14 )
      {
        v16 = *(_QWORD *)(v14 + 48);
        v18 = 0i64;
        if( (int)sub_14065D374(a1 + 8, v16, 8u, -1, &v18) >= 0 )
          sub_14065EF2C((_EX_PUSH_LOCK *)a1, v18);
      }
      v17 = _InterlockedExchangeAdd64(&v6->_bf_0, 0xFFFFFFFFFFFFFFFFui64);
      if( (v17 & 2) != 0 && (v17 & 4) == 0 )
        ExfTryToWakePushLock(v6);
      KeAbPostRelease(v6);
      KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
      if( !v14 )
        break;
      sub_14065EF2C((_EX_PUSH_LOCK *)a1, v14);
    }
    while( v2 > 0 );
  }
}

Referenced by:

WbGetHeapExecutedBlock