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