ViDeadlockAddThread
_VI_DEADLOCK_THREAD *__fastcall ViDeadlockAddThread(unsigned __int64 Thread, VOID *ReservedThread){
_VI_DEADLOCK_THREAD *result;
_QWORD *v5;
_QWORD *v7;
unsigned __int64 v8;
__int64 v9;
__int64 v10;
__int64 v11;
_VI_DEADLOCK_THREAD *v12;
result = 0i64;
if( ReservedThread )
{
v5 = ViDeadlockGlobals;
*((_QWORD *)ReservedThread + 1) = 0i64;
*((_QWORD *)ReservedThread + 2) = 0i64;
*((_DWORD *)ReservedThread + 10) = 0;
*((_DWORD *)ReservedThread + 11) = 0;
*((_BYTE *)ReservedThread + 48) = 0;
*(_QWORD *)ReservedThread = Thread;
v7 = (char *)ReservedThread + 24;
v8 = (Thread >> 12) % 0x3FF;
v9 = v5[2050] + 16 * v8;
v10 = *(_QWORD *)v9;
if( *(_QWORD *)(*(_QWORD *)v9 + 8i64) != v9 )
__fastfail(3u);
*v7 = v10;
*((_QWORD *)ReservedThread + 4) = v9;
*(_QWORD *)(v10 + 8) = v7;
*(_QWORD *)v9 = v7;
VfUtilAddressRangeAdd(&v5[2 * v8 + 2052], Thread, 2200i64);
++*(_QWORD *)(v11 + 16408);
return v12;
}
return result;
}Referenced by:
VfDeadlockAcquireResource
VfDeadlockBeforeCallDriver