CmpDoReconcileNextHive

UINT8 __stdcall CmpDoReconcileNextHive(UINT8 *WriteError, UINT64 *NextDueDelay){
  UINT8 v2; 
  UINT64 v3; 
  _CMHIVE *v6; 
  _CMHIVE *NextActiveHive; 
  unsigned __int64 v8; 
  UINT64 UnbiasedInterruptTime; 
  unsigned __int64 v10; 
  unsigned int EffectiveLogSizeCapForHive; 

  v2 = 0;
  v3 = 10000000i64 * (unsigned int)dword_140C004C4;
  if( !BYTE1(NlsMbCodePageTag) )
  {
    v6 = 0i64;
    while( 1 )
    {
      NextActiveHive = CmpGetNextActiveHive(v6);
      if( !NextActiveHive )
        break;
      v8 = -1i64;
      UnbiasedInterruptTime = KiQueryUnbiasedInterruptTime(1u);
      if( CmpIsHiveEligibleForLazyReconcile(NextActiveHive) )
      {
        EffectiveLogSizeCapForHive = HvGetEffectiveLogSizeCapForHive(&NextActiveHive->Hive);
        if( CmpFlushHive(NextActiveHive, NextActiveHive->Hive.CurrentLogOffset < EffectiveLogSizeCapForHive ? 22 : 6) < 0 )
        {
          *WriteError = 1;
          v8 = UnbiasedInterruptTime + 10000000i64 * (unsigned int)dword_140C004CC;
        }
      }
      else if( NextActiveHive->Hive.UnreconciledCount )
      {
        if( (NextActiveHive->Hive.HiveFlags & 0x8001) == 0 )
        {
          v2 = 1;
          v10 = NextActiveHive->UnreconciledTime + 10000000i64 * (unsigned int)dword_140C004C0;
          if( UnbiasedInterruptTime < v10 )
            v8 = v10 - UnbiasedInterruptTime;
        }
      }
      v6 = NextActiveHive;
      if( v8 >= v3 )
        v8 = v3;
      v3 = v8;
    }
    CmpFlushUnsupportedOperationTelemetry();
    if( v2 )
      *NextDueDelay = v3;
  }
  return v2;
}

Referenced by:

No references.