mirror of
https://github.com/esphome/esphome.git
synced 2025-09-16 10:12:21 +01:00
preen
This commit is contained in:
@@ -517,7 +517,9 @@ void HOT Scheduler::call(uint32_t now) {
|
||||
void HOT Scheduler::process_to_add() {
|
||||
LockGuard guard{this->lock_};
|
||||
for (auto &it : this->to_add_) {
|
||||
if (it->remove) {
|
||||
if (is_item_removed_(it.get())) {
|
||||
// Recycle cancelled items
|
||||
this->recycle_item_(std::move(it));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -595,10 +597,14 @@ bool HOT Scheduler::cancel_item_locked_(Component *component, const char *name_c
|
||||
|
||||
// Check all containers for matching items
|
||||
#ifndef ESPHOME_THREAD_SINGLE
|
||||
// Cancel and immediately recycle items in defer queue
|
||||
// Mark items in defer queue as cancelled (they'll be skipped when processed)
|
||||
if (type == SchedulerItem::TIMEOUT) {
|
||||
total_cancelled +=
|
||||
this->cancel_and_recycle_from_container_(this->defer_queue_, component, name_cstr, type, match_retry);
|
||||
for (auto &item : this->defer_queue_) {
|
||||
if (this->matches_item_(item, component, name_cstr, type, match_retry)) {
|
||||
this->mark_item_removed_(item.get());
|
||||
total_cancelled++;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* not ESPHOME_THREAD_SINGLE */
|
||||
|
||||
@@ -622,8 +628,14 @@ bool HOT Scheduler::cancel_item_locked_(Component *component, const char *name_c
|
||||
}
|
||||
}
|
||||
|
||||
// Cancel and immediately recycle items in to_add_ since they're not in heap yet
|
||||
total_cancelled += this->cancel_and_recycle_from_container_(this->to_add_, component, name_cstr, type, match_retry);
|
||||
// Cancel items in to_add_
|
||||
for (auto &item : this->to_add_) {
|
||||
if (this->matches_item_(item, component, name_cstr, type, match_retry)) {
|
||||
this->mark_item_removed_(item.get());
|
||||
total_cancelled++;
|
||||
// Don't track removals for to_add_ items
|
||||
}
|
||||
}
|
||||
|
||||
return total_cancelled > 0;
|
||||
}
|
||||
|
@@ -291,24 +291,6 @@ class Scheduler {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Template helper to cancel and recycle items from a container
|
||||
template<typename Container>
|
||||
size_t cancel_and_recycle_from_container_(Container &container, Component *component, const char *name_cstr,
|
||||
SchedulerItem::Type type, bool match_retry) {
|
||||
size_t cancelled = 0;
|
||||
for (auto it = container.begin(); it != container.end();) {
|
||||
if (this->matches_item_(*it, component, name_cstr, type, match_retry)) {
|
||||
// Recycle the cancelled item immediately
|
||||
this->recycle_item_(std::move(*it));
|
||||
it = container.erase(it);
|
||||
cancelled++;
|
||||
} else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
Mutex lock_;
|
||||
std::vector<std::unique_ptr<SchedulerItem>> items_;
|
||||
std::vector<std::unique_ptr<SchedulerItem>> to_add_;
|
||||
|
Reference in New Issue
Block a user