RtlpHpVsChunkFree

UINT64 __fastcall RtlpHpVsChunkFree(INT64 SpinLock, UINT64 a2, _WORD *a3, CHAR a4, INT64 a5){
  unsigned int v5; 
  INT64 v6; 
  unsigned int i; 
  INT64 v11; 
  __int64 v12; 
  __int64 v13; 
  _WORD *v14; 
  UINT64 v16; 

  LODWORD(v16) = 0;
  v5 = a4;
  v6 = a5;
  for( i = 0; ; i = v16 )
  {
    a3 = (_WORD *)RtlpHpVsChunkCoalesce(SpinLock, a2, (UINT64)a3, &v16);
    if( (_DWORD)v16 == *(unsigned __int16 *)(a2 + 32) )
    {
      RtlpHpVsSubsegmentCleanup(SpinLock, a2, v12, v13);
      return a2;
    }
    if( (unsigned int)v16 <= i || !RtlpHpVsChunkDecommit((PVOID)SpinLock, a2, (INT64)a3, v5, v6) )
      break;
  }
  if( (*(_DWORD *)(SpinLock + 176) & 1) != 0 && ((unsigned __int64)(a3 + 16) & 0xFFF) != 0 )
  {
    v14 = (_WORD *)RtlpHpVsChunkAlignSplit(v11, a2, (INT64)a3);
    if( v14 )
      RtlpHpVsFreeChunkInsert((UINT64 *)SpinLock, a2, v14);
  }
  RtlpHpVsFreeChunkInsert((UINT64 *)SpinLock, a2, a3);
  return 0i64;
}

Referenced by:

RtlpHpVsContextFreeInternal