ProducerGetBuffer
UINT64 __fastcall ProducerGetBuffer(INT64 a1, UINT64 a2, UINT64 a3, CHAR a4){
__int64 v4;
__int64 v6;
unsigned __int64 v8;
UINT64 result;
v4 = (unsigned int)a3;
v6 = (unsigned int)a2;
while( _InterlockedCompareExchange((volatile signed __int32 *)(a1 + 24), 1, 0) )
{
do
{
_mm_pause();
PopHiberCheckForDebugBreak();
}
while( *(_DWORD *)(a1 + 24) );
}
while( 1 )
{
if( (unsigned int)v6 <= *(_DWORD *)(a1 + 56) + *(_DWORD *)(a1 + 8) - *(_DWORD *)(a1 + 32) )
{
v8 = *(_QWORD *)(a1 + 32);
result = *(_QWORD *)a1 + v8 % *(unsigned int *)(a1 + 8);
*(_QWORD *)(a1 + 16) -= v4;
*(_QWORD *)(a1 + 32) = v8 + v6;
goto LABEL_4;
}
if( (a4 & 1) != 0 )
break;
*(_DWORD *)(a1 + 24) = 0;
do
{
_mm_pause();
PopHiberCheckForDebugBreak();
}
while( (unsigned int)v6 > *(_DWORD *)(a1 + 8) + *(_DWORD *)(a1 + 56) - *(_DWORD *)(a1 + 32) );
while( _InterlockedCompareExchange((volatile signed __int32 *)(a1 + 24), 1, 0) )
{
do
{
_mm_pause();
PopHiberCheckForDebugBreak();
}
while( *(_DWORD *)(a1 + 24) );
}
}
result = 0i64;
LABEL_4:
*(_DWORD *)(a1 + 24) = 0;
return result;
}Referenced by:
PopCountDataAsProduced
PopRequestRead