ViDeadlockMergeNodes
INT64 *__fastcall ViDeadlockMergeNodes(INT64 a1, INT64 a2, INT64 **a3){
__int64 v3;
INT64 v5;
INT64 v6;
_QWORD *v7;
__int64 v8;
_QWORD *v9;
_QWORD *v10;
_QWORD *v11;
__int64 v12;
_QWORD *v13;
__int64 v14;
_QWORD *v15;
__int64 v16;
_QWORD *v17;
INT64 *result;
v3 = *(_QWORD *)(a2 + 64);
v5 = a2;
if( v3 )
{
*(_QWORD *)(a1 + 64) = v3;
*(_OWORD *)(a1 + 80) = *(_OWORD *)(a2 + 80);
*(_OWORD *)(a1 + 96) = *(_OWORD *)(a2 + 96);
*(_OWORD *)(a1 + 112) = *(_OWORD *)(a2 + 112);
*(_OWORD *)(a1 + 128) = *(_OWORD *)(a2 + 128);
*(_OWORD *)(a1 + 144) = *(_OWORD *)(a2 + 144);
*(_OWORD *)(a1 + 160) = *(_OWORD *)(a2 + 160);
*(_OWORD *)(a1 + 176) = *(_OWORD *)(a2 + 176);
*(_OWORD *)(a1 + 192) = *(_OWORD *)(a2 + 192);
}
if( (*(_DWORD *)(a2 + 72) & 1) != 0 )
*(_DWORD *)(a1 + 72) = *(_DWORD *)(a2 + 72) & 1 | *(_DWORD *)(a1 + 72) & 0xFFFFFFFE;
v6 = a2 + 8;
v7 = *(_QWORD **)(a2 + 8);
while( v7 != (_QWORD *)v6 )
{
v8 = *v7;
v9 = v7 - 3;
v10 = v7;
if( *(_QWORD **)(*v7 + 8i64) != v7 )
goto LABEL_18;
v11 = (_QWORD *)v7[1];
if( (_QWORD *)*v11 != v7 )
goto LABEL_18;
*v11 = v8;
*(_QWORD *)(v8 + 8) = v11;
ViDeadlockUpdateChildrenCount((_VI_DEADLOCK_NODE *)v5, (unsigned int)~*((_DWORD *)v9 + 19));
*v9 = v12;
v13 = *(_QWORD **)(v12 + 16);
if( *v13 != v12 + 8 )
goto LABEL_18;
v10[1] = v13;
*v10 = v12 + 8;
*v13 = v10;
*(_QWORD *)(v12 + 16) = v10;
ViDeadlockUpdateChildrenCount((_VI_DEADLOCK_NODE *)v12, (unsigned int)(*((_DWORD *)v9 + 19) + 1));
}
if( *(_QWORD *)v5 )
{
v14 = *(_QWORD *)(v5 + 24);
if( *(_QWORD *)(v14 + 8) != v5 + 24 || (v15 = *(_QWORD **)(v5 + 32), *v15 != v5 + 24) )
LABEL_18:
__fastfail(3u);
*v15 = v14;
*(_QWORD *)(v14 + 8) = v15;
ViDeadlockUpdateChildrenCount(*(_VI_DEADLOCK_NODE **)v5, 0xFFFFFFFFi64);
}
--*(_WORD *)(*(_QWORD *)(v5 + 56) + 4i64);
v16 = *(_QWORD *)(v5 + 40);
if( *(_QWORD *)(v16 + 8) != v5 + 40 )
goto LABEL_18;
v17 = *(_QWORD **)(v5 + 48);
if( *v17 != v5 + 40 )
goto LABEL_18;
result = *a3;
*v17 = v16;
*(_QWORD *)(v16 + 8) = v17;
*a3 = (INT64 *)v5;
*(_QWORD *)v5 = result;
return result;
}Referenced by:
ViDeadlockCheckDuplicatesAmongChildren
ViDeadlockCheckDuplicatesAmongRoots