mirror of
https://github.com/esphome/esphome.git
synced 2026-06-24 12:17:23 +00:00
[core] Inline loop gate expression to avoid stale local reuse (#16167)
This commit is contained in:
@@ -637,10 +637,12 @@ inline void ESPHOME_ALWAYS_INLINE Application::loop() {
|
||||
// flag preserves it. wake_request_take() exchange-clears the flag; wakes
|
||||
// that arrive during Phase B re-set it and run Phase B again on the next
|
||||
// iteration.
|
||||
const bool high_frequency = HighFrequencyLoopRequester::is_high_frequency();
|
||||
const uint32_t elapsed = now - this->last_loop_;
|
||||
const bool woke = esphome::wake_request_take();
|
||||
const bool do_component_phase = high_frequency || woke || (elapsed >= this->loop_interval_);
|
||||
//
|
||||
// wake_request_take() must always be called first since it does an
|
||||
// atomic exchange to clear the flag, and we want to run the component phase
|
||||
// if either the flag was set or the scheduler requested a high-frequency loop.
|
||||
const bool do_component_phase = esphome::wake_request_take() || HighFrequencyLoopRequester::is_high_frequency() ||
|
||||
(now - this->last_loop_ >= this->loop_interval_);
|
||||
|
||||
if (do_component_phase) {
|
||||
ComponentPhaseGuard phase_guard{*this};
|
||||
|
||||
Reference in New Issue
Block a user