ViDeadlockForgetResourceHistory
PVOID __fastcall ViDeadlockForgetResourceHistory(__int64 a1, __int64 a2, __int64 a3, __int64 *a4){
int v4;
int v7;
PVOID result;
_QWORD **v9;
_QWORD *v10;
unsigned int v11;
__int64 v12;
unsigned int v13;
_QWORD *v14;
_VI_DEADLOCK_NODE *v15;
v4 = 0;
v7 = 0;
if( *(_QWORD *)(a1 + 16) )
return result;
result = (PVOID)*(unsigned int *)(a1 + 4);
if( (unsigned __int16)result < 0x100u )
return result;
v9 = (_QWORD **)(a1 + 24);
v10 = *(_QWORD **)(a1 + 24);
v11 = *((_DWORD *)ViDeadlockGlobals + 8201);
while( v10 != v9 )
{
v12 = (__int64)(v10 - 5);
v10 = (_QWORD *)*v10;
v13 = *(_DWORD *)(v12 + 72) >> 3;
if( v11 <= v13 )
{
if( v13 - v11 < 0x2000 )
goto LABEL_8;
}
else if( v11 - v13 > 0x2000 )
{
LABEL_8:
ViDeadlockRemoveNode((_VI_DEADLOCK_NODE *)v12, 0i64);
++v7;
*(_QWORD *)v12 = *a4;
*a4 = v12;
}
}
*((_DWORD *)ViDeadlockGlobals + 8197) += v7;
result = (PVOID)*(unsigned int *)(a1 + 4);
if( (unsigned __int16)result >= 0x100u )
{
v14 = *v9;
while( v14 != v9 && (unsigned __int16)*(_DWORD *)(a1 + 4) >= 0x100u )
{
v15 = (_VI_DEADLOCK_NODE *)(v14 - 5);
v14 = (_QWORD *)*v14;
ViDeadlockRemoveNode(v15, 0i64);
++v4;
*(_QWORD *)v15 = *a4;
*a4 = (__int64)v15;
}
result = ViDeadlockGlobals;
*((_DWORD *)ViDeadlockGlobals + 8198) += v4;
}
return result;
}Referenced by:
ViDeadlockTrimResources