EtwpReleaseTraceBuffer

VOID __stdcall EtwpReleaseTraceBuffer(_ETW_BUFFER_HANDLE *BufferHandle){
  __int64 v1; 
  signed __int64 *v2; 
  signed __int64 v3; 
  signed __int64 v4; 

  v1 = *(_QWORD *)BufferHandle;
  v2 = (signed __int64 *)*((_QWORD *)BufferHandle + 1);
  _m_prefetchw(v2);
  v3 = *v2;
  if( (v1 ^ (unsigned __int64)*v2) >= 0xF )
  {
LABEL_4:
    _InterlockedDecrement((volatile signed __int32 *)(*(_QWORD *)BufferHandle + 12i64));
  }
  else
  {
    while( 1 )
    {
      v4 = v3;
      v3 = _InterlockedCompareExchange64(v2, v3 + 1, v3);
      if( v4 == v3 )
        break;
      if( (v1 ^ (unsigned __int64)v3) >= 0xF )
        goto LABEL_4;
    }
  }
}

Referenced by:

EtwTraceEvent
EtwTraceRaw
EtwpEventWriteFull
EtwpFailLogging
EtwpLogContextSwapEvent
EtwpLogSystemEventUnsafe
EtwpTraceMessageVa
EtwpWriteUserEvent