ViDeadlockRemoveNode
VOID __stdcall ViDeadlockRemoveNode(_VI_DEADLOCK_NODE *Node, UINT64 DisableConsistencyChecks){
_VI_DEADLOCK_NODE *v2;
$40597CAD8088CB40007EECA86A191ECD *v3;
_LIST_ENTRY *v4;
_LIST_ENTRY *v5;
_LIST_ENTRY *p_ChildrenList;
_LIST_ENTRY *Flink;
_LIST_ENTRY *v8;
_LIST_ENTRY **p_Blink;
_LIST_ENTRY *v10;
_LIST_ENTRY *Blink;
__int64 v12;
_LIST_ENTRY *v13;
_LIST_ENTRY *v14;
_LIST_ENTRY *v15;
_LIST_ENTRY *v16;
_LIST_ENTRY **v17;
_LIST_ENTRY *v18;
_LIST_ENTRY *v19;
v2 = Node;
if( !(_DWORD)DisableConsistencyChecks )
{
p_ChildrenList = &Node->ChildrenList;
Flink = Node->ChildrenList.Flink;
if( v2->Parent )
{
while( Flink != p_ChildrenList )
{
v8 = Flink->Flink;
p_Blink = &Flink[-2].Blink;
v10 = Flink;
Flink = v8;
if( v8->Blink != v10 )
goto LABEL_20;
Blink = v10->Blink;
if( Blink->Flink != v10 )
goto LABEL_20;
Blink->Flink = v8;
v8->Blink = Blink;
v2->ChildrenCount += -1 - *((_DWORD *)p_Blink + 19);
*p_Blink = (_LIST_ENTRY *)v2->Parent;
v12 = (__int64)&v2->Parent->ChildrenList;
v13 = v2->Parent->ChildrenList.Blink;
if( v13->Flink != (_LIST_ENTRY *)v12 )
goto LABEL_20;
v10->Flink = (_LIST_ENTRY *)v12;
v10->Blink = v13;
v13->Flink = v10;
*(_QWORD *)(v12 + 8) = v10;
}
v14 = v2->SiblingsList.Flink;
if( v14->Blink != &v2->SiblingsList || (v15 = v2->SiblingsList.Blink, v15->Flink != &v2->SiblingsList) )
LABEL_20:
__fastfail(3u);
v15->Flink = v14;
v14->Blink = v15;
ViDeadlockUpdateChildrenCount(v2->Parent, 0xFFFFFFFFi64);
}
else
{
while( Flink != p_ChildrenList )
{
v16 = Flink->Flink;
v17 = &Flink[-2].Blink;
v18 = Flink;
Flink = v16;
if( v16->Blink != v18 )
goto LABEL_20;
v19 = v18->Blink;
if( v19->Flink != v18 )
goto LABEL_20;
v19->Flink = v16;
v16->Blink = v19;
v2->ChildrenCount += -1 - *((_DWORD *)v17 + 19);
*v17 = 0i64;
v18->Flink = 0i64;
v17[4] = 0i64;
}
}
--*((_WORD *)v2->Root + 2);
}
v3 = &v2->40;
v4 = v3->ResourceList.Flink;
if( ($40597CAD8088CB40007EECA86A191ECD *)v3->ResourceList.Flink->Blink != v3 )
goto LABEL_20;
v5 = v3->ResourceList.Blink;
if( ($40597CAD8088CB40007EECA86A191ECD *)v5->Flink != v3 )
goto LABEL_20;
v5->Flink = v4;
v4->Blink = v5;
}Referenced by:
ViDeadlockForgetResourceHistory
ViDeadlockRemoveResource