RtlpStdGetSpaceForTrace

_SLIST_ENTRY *__fastcall RtlpStdGetSpaceForTrace(UINT64 *SpinLock, UINT16 a2){
  __int64 v2; 
  unsigned int i; 
  PSLIST_ENTRY v6; 
  _SLIST_ENTRY *v7; 
  unsigned int v8; 

  v2 = a2;
  if( !a2 )
    return 0i64;
  for( i = a2 - 1; i < 0x20; ++i )
  {
    v6 = RtlpInterlockedPopEntrySList((PSLIST_HEADER)&SpinLock[2 * i + 26]);
    if( v6 )
    {
      _InterlockedDecrement((volatile signed __int32 *)SpinLock + 49);
      return v6 - 1;
    }
  }
  v7 = (_SLIST_ENTRY *)RtlpStdExtendLowerWatermark(
                         (_STACK_TRACE_DATABASE *)SpinLock,
                         (8 * v2 + 31) & 0xFFFFFFFFFFFFFFF0ui64);
  if( v7 )
  {
    v8 = ((((8 * (_DWORD)v2 + 31) & 0xFFFFFFF0) - 16) >> 3) - 1;
    if( v8 > 0x1F )
      LOWORD(v8) = 31;
    *((_WORD *)&v7->Next + 4) = ((_WORD)v8 << 11) | *(_WORD *)(&v7->Next + 1) & 0x7FF;
  }
  return v7;
}

Referenced by:

RtlpStdLogCapturedStackTrace