PopEtEnergyTrackerCleanup
INT64 __fastcall PopEtEnergyTrackerCleanup(INT64 a1){
__int64 v2;
_QWORD *v3;
void *v4;
INT64 *v5;
INT64 *v6;
INT64 v7;
_QWORD *i;
INT64 *v9;
INT64 *j;
void *v11;
PopAcquireRwLockExclusive((_POP_RW_LOCK *)(PopEtGlobals + 16));
v2 = *(_QWORD *)a1;
if( *(_QWORD *)(*(_QWORD *)a1 + 8i64) != a1 || (v3 = *(_QWORD **)(a1 + 8), *v3 != a1) )
__fastfail(3u);
*v3 = v2;
*(_QWORD *)(v2 + 8) = v3;
PopReleaseRwLock(PopEtGlobals + 16);
PopEtEnergyTrackerCleanupAggregates(a1);
v4 = *(void **)(a1 + 56);
if( v4 )
ExFreePoolWithTag(v4, 0x54456F50u);
v5 = *(INT64 **)(a1 + 72);
v6 = v5;
while( 1 )
{
if( !v6 )
goto LABEL_11;
v7 = *v6;
if( (*v6 & 0x8000000000000002ui64) == 0x8000000000000002ui64 )
v7 = *v6;
if( (v7 & 1) != 0 )
{
LABEL_11:
for( i = v5 + 1; ; ++i )
{
if( (unsigned __int64)i >= *(_QWORD *)(a1 + 72) + 8 * ((unsigned __int64)*(unsigned int *)(a1 + 68) >> 5) )
{
v7 = 0i64;
goto LABEL_16;
}
if( (*i & 1) == 0 )
break;
}
v6 = (INT64 *)*i;
v5 = i;
v7 = *i;
}
else
{
v6 = (INT64 *)v7;
}
LABEL_16:
if( !v7 )
break;
v9 = v6;
for( j = v5; (*j & 1) == 0; j = (INT64 *)*j )
{
if( (INT64 *)*j == v6 )
{
*j = *v6;
--*(_DWORD *)(a1 + 64);
*v6 |= 0x8000000000000002ui64;
v6 = j;
goto LABEL_24;
}
}
v9 = 0i64;
LABEL_24:
PopEtAggregateKeyCleanup(v9 + 2);
ExFreePoolWithTag(v9, 0x54456F50u);
}
v11 = *(void **)(a1 + 72);
if( v11 )
ExFreePoolWithTag(v11, 0x54456F50u);
return PopEtAggregateKeyCleanup((INT64 *)(a1 + 96));
}Referenced by:
PopEtEnergyTrackerDelete