mirror of
https://github.com/okieselbach/AutopilotMonitor.git
synced 2026-10-25 05:00:07 +00:00
993ebbaa67
Reduce the V2 agent footprint during enrollment without touching any capability or the deliberate live-tracking cadences (DO 3s poll, IME 100ms poll, download_progress ImmediateUpload — all product USP). RegistryWatcher: replace the dedicated background thread (new Thread + WaitHandle.WaitAny on RegNotifyChangeKeyValue) with a ThreadPool wait (ThreadPool.RegisterWaitForSingleObject), mirroring the proven pattern in Monitoring/Telemetry/Office/RegistryChangeWatcher. Removes up to ~7-8 dedicated ~1MB thread stacks (Enrollments + CloudDomainJoin + AadJoin + Provisioning + up to 4x RealmJoin). The public contract is preserved verbatim: ctor signature, Changed/Error events, IsRunning, Start()/RequestStop()/Stop() (incl. deferred rethrow of the captured background failure) and Dispose(). Arming stays synchronous in Start(); Changed is raised outside the lock; the watcher re-arms after each single-shot notification. All four consumers run unchanged. Disposal hygiene: - WmiCollector: dispose each ManagementObject per iteration (native WMI/COM memory) via using (obj). - AgentSelfMetricsCollector: wrap both Process.GetCurrentProcess() in using var (handle leak in the 60s metrics loop). Verified: V2.Core + V2 agent build clean; full V2.Core suite 1264/1264 green, incl. the RegistryWatcher Win32 integration tests (value write, subtree subkey, repeated successive changes) and the RealmJoin / AadJoin / Provisioning / TenantId consumer tests. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>