SmHpChunkFree

VOID __stdcall SmHpChunkFree(_SMHP_CHUNK_HEAP *Heap, VOID *Chunk){
  __int64 v3; 
  __int64 v4; 
  _WORD *v5; 
  int v6; 

  v3 = *(unsigned int *)(((unsigned __int64)Chunk & 0xFFFFFFFFFFFFF000ui64) + 0x10);
  _BitScanReverse((unsigned int *)&v4, v3);
  v5 = (_WORD *)(*(_QWORD *)&Heap[2 * v4] + 16 * (v3 ^ (unsigned int)(1 << v4)));
  *(_WORD *)Chunk = v5[4];
  v5[4] = (_WORD)Chunk - *v5;
  SmHpBufferUpdateFullness(Heap, v5, 1i64);
  v6 = (unsigned __int16)v5[5];
  if( v6 == Heap[137] && Heap[140] - v6 >= (unsigned int)Heap[139] )
    SmHpBufferCleanup((__int64)Heap, v5);
  --Heap[141];
}

Referenced by:

ST_STORE::StDmCleanup
ST_STORE::StDmCombinePageEntry
ST_STORE::StDmPageRemove
ST_STORE::StDmpSinglePageAdd