RtlpHpHeapDestroy

__int64 __fastcall RtlpHpHeapDestroy(UINT64 a1, __int64 a2, __int64 a3, __int64 a4){
  UINT64 v4; 
  bool v5; 
  __int64 v7; 
  char v8; 
  int v9; 
  _QWORD *v10; 
  __int64 v11; 
  __int64 v12; 
  unsigned __int64 v13; 
  UINT64 v14; 
  UINT64 v15; 
  INT64 v16; 
  __int128 v17; 
  __int128 v19; 
  __int128 a4a; 
  UINT64 a1a; 
  UINT64 a2a; 
  a1a = a1;
  a2a = 0i64;
  v4 = a1 + 72;
  v5 = (*(_BYTE *)(a1 + 80) & 1) == 0;
  v7 = *(_QWORD *)(a1 + 72);
  if( !v5 && v7 )
    v7 ^= v4;
  v8 = *(_BYTE *)(v4 + 8);
  v9 = v8 & 1;
  if( v7 )
  {
    while( 1 )
    {
      while( 1 )
      {
        while( *(_QWORD *)v7 )
        {
          v10 = (_QWORD *)v7;
          if( v9 )
            v7 ^= *(_QWORD *)v7;
          else
            v7 = *(_QWORD *)v7;
          *v10 = 0i64;
        }
        v11 = *(_QWORD *)(v7 + 8);
        if( !v11 )
          break;
        v12 = v7;
        if( v9 )
          v7 ^= v11;
        else
          v7 = *(_QWORD *)(v7 + 8);
        *(_QWORD *)(v12 + 8) = 0i64;
      }
      v13 = *(_QWORD *)(v7 + 16) & 0xFFFFFFFFFFFFFFFCui64;
      if( v9 && v13 )
        v13 ^= v7;
      RtlpHpLargeAllocationDestroy(v7, (__int128 *)a1);
      if( !v13 )
        break;
      v7 = v13;
    }
    v8 = *(_BYTE *)(v4 + 8);
  }
  *(_QWORD *)v4 = 0i64;
  *(_QWORD *)(v4 + 8) = 0i64;
  if( (v8 & 1) != 0 )
    *(_BYTE *)(v4 + 8) = 1;
  v14 = a1a;
  v15 = a1a + 672;
  while( *(_QWORD *)v15 )
  {
    v16 = v15 ^ *(_QWORD *)v15;
    RtlpHpVsSubsegmentCleanup(v14 + 640, v16, a3, a4);
    RtlpHpVsSubsegmentFree(v14 + 640, v16, 1ui64);
  }
  RtlpHpLfhContextCleanup(a1a + 832);
  RtlpHpSegContextCleanup(a1a + 256);
  RtlpHpSegContextCleanup(a1a + 448);
  v17 = *(_OWORD *)a1a;
  a2a = *(_QWORD *)(a1a + 248) - a1a;
  v5 = (*(_BYTE *)(a1a + 30) & 1) == 0;
  v19 = v17;
  a4a = *(_OWORD *)a1a;
  if( v5 )
    RtlpHpFreeVA(&a1a, &a2a, BYTE1(v19) < 2u ? 16809984 : 0x8000, &a4a);
  else
    RtlpHpMetadataFree(a1a, &a4a);
  return RtlpHpRegisterEnvironment(&v19);
}

Referenced by:

ExCleanupSessionHeapManager
RtlpHpHeapCreate