ViDeadlockEmptyDatabase
VOID __stdcall ViDeadlockEmptyDatabase(){
_QWORD *v0;
_VI_DEADLOCK_THREAD *v1;
_VI_DEADLOCK_RESOURCE *v2;
__int64 v3;
__int64 v4;
__int64 v5;
__int64 v6;
_QWORD *v7;
_VI_DEADLOCK_RESOURCE *v8;
_QWORD *v9;
__int64 v10;
__int64 v11;
_QWORD *v12;
_VI_DEADLOCK_THREAD *v13;
_QWORD *v14;
_ETHREAD *Thread;
_QWORD *v16;
_VI_DEADLOCK_RESOURCE *v17;
UINT8 OldIrql;
PVOID NodesToFree;
v0 = 0i64;
v1 = 0i64;
NodesToFree = 0i64;
v2 = 0i64;
OldIrql = ViRaiseIrqlToDpcLevel();
ViDeadlockDetectionLock(1ui64);
ViDeadlockDetectionEnabled = 0;
if( ViDeadlockGlobals )
{
v3 = *((_QWORD *)ViDeadlockGlobals + 2);
v4 = 1023i64;
v5 = 1023i64;
v6 = 0i64;
do
{
v7 = *(_QWORD **)(v6 + v3);
while( v7 != (_QWORD *)((char *)v0 + v3) )
{
v8 = (_VI_DEADLOCK_RESOURCE *)(v7 - 5);
v7 = (_QWORD *)*v7;
ViDeadlockRemoveResource(v8, 1ui64, &NodesToFree);
v9 = ViDeadlockGlobals;
*(_QWORD *)&v8->Type = v2;
v2 = v8;
v3 = v9[2];
}
v0 += 2;
v6 += 16i64;
--v5;
}
while( v5 );
v10 = 0i64;
v11 = *((_QWORD *)ViDeadlockGlobals + 2050);
do
{
v12 = *(_QWORD **)(v5 + v11);
while( v12 != (_QWORD *)(v10 + v11) )
{
v13 = (_VI_DEADLOCK_THREAD *)(v12 - 3);
v12 = (_QWORD *)*v12;
ViDeadlockRemoveThread(v13, 1ui64);
v14 = ViDeadlockGlobals;
v13->Thread = (_ETHREAD *)v1;
v1 = v13;
v11 = v14[2050];
}
v10 += 16i64;
v5 += 16i64;
--v4;
}
while( v4 );
v0 = NodesToFree;
}
ViDeadlockDetectionUnlock(1ui64);
ViLowerIrql(OldIrql);
if( v1 )
{
do
{
Thread = v1->Thread;
ViDeadlockFree(v1, 3);
v1 = (_VI_DEADLOCK_THREAD *)Thread;
}
while( Thread );
}
if( v0 )
{
do
{
v16 = (_QWORD *)*v0;
ViDeadlockFree(v0, 2);
v0 = v16;
}
while( v16 );
}
if( v2 )
{
do
{
v17 = *(_VI_DEADLOCK_RESOURCE **)&v2->Type;
ViDeadlockFree(v2, 1);
v2 = v17;
}
while( v17 );
}
}Referenced by:
ViDeadlockDetectionApplySettings