ViDeadlockCheckDuplicatesAmongRoots

VOID **__fastcall ViDeadlockCheckDuplicatesAmongRoots(INT64 a1, INT64 **a2){
  VOID **result; 
  int v3; 
  _QWORD **v4; 
  _QWORD *v7; 
  _VI_DEADLOCK_NODE *v8; 
  _VI_DEADLOCK_NODE *v9; 
  void *retaddr; 

  result = &retaddr;
  v3 = 0;
  v4 = (_QWORD **)(*(_QWORD *)(a1 + 56) + 24i64);
  v7 = *v4;
  while( v7 != v4 )
  {
    v8 = (_VI_DEADLOCK_NODE *)(v7 - 5);
    v7 = (_QWORD *)*v7;
    if( !v8->Parent )
    {
      result = (VOID **)ViDeadlockSimilarNodes(v8, (_VI_DEADLOCK_NODE *)a1);
      if( (_DWORD)result )
      {
        if( v3 )
          ViDeadlockMergeNodes((_VI_DEADLOCK_NODE *)a1, v9, (VOID **)a2);
        else
          v3 = 1;
      }
    }
  }
  return result;
}

Referenced by:

VfDeadlockAcquireResource