diff --git a/esphome/core/scheduler.cpp b/esphome/core/scheduler.cpp index 6834b72aab..536a2b1025 100644 --- a/esphome/core/scheduler.cpp +++ b/esphome/core/scheduler.cpp @@ -538,11 +538,11 @@ uint64_t Scheduler::millis_64_(uint32_t now) { #ifdef ESPHOME_MULTI_CORE_NO_ATOMICS // This is the multi core no atomics implementation. // - // The implementation handles the 32-bit rollover (every 49.7 days) by: - // 1. Using a lock when detecting rollover to ensure atomic update - // 2. Restricting normal updates to forward movement within the same epoch - // This prevents race conditions at the rollover boundary without requiring - // 64-bit atomics or locking on every call. + // Without atomics, this implementation uses locks more aggressively: + // 1. Always locks when near the rollover boundary (within 10 seconds) + // 2. Always locks when detecting a large backwards jump + // 3. Updates without lock in normal forward progression (accepting minor races) + // This is less efficient but necessary without atomic operations. uint16_t major = this->millis_major_; uint32_t last = this->last_millis_;