From e7e4b995bfafec7432f622000905d2759e960236 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 16 Jun 2025 15:15:26 +0200 Subject: [PATCH] ble pool --- esphome/components/esp32_ble/ble_event_pool.h | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/esphome/components/esp32_ble/ble_event_pool.h b/esphome/components/esp32_ble/ble_event_pool.h index 26f091536f..36f9f64de9 100644 --- a/esphome/components/esp32_ble/ble_event_pool.h +++ b/esphome/components/esp32_ble/ble_event_pool.h @@ -15,7 +15,7 @@ namespace esp32_ble { // Events are allocated on first use and reused thereafter, growing to peak usage template class BLEEventPool { public: - BLEEventPool() : total_created_(0) {} + BLEEventPool() { total_created_.store(0, std::memory_order_relaxed); } ~BLEEventPool() { // Clean up any remaining events in the free list @@ -49,7 +49,7 @@ template class BLEEventPool { // Placement new to construct the object new (event) BLEEvent(); - this->total_created_++; + this->total_created_.fetch_add(1, std::memory_order_relaxed); } return event; @@ -57,25 +57,23 @@ template class BLEEventPool { // Return an event to the pool for reuse void release(BLEEvent *event) { - if (event == nullptr) { - return; + if (event != nullptr) { + this->free_list_.push(event); } - - this->free_list_.push(event); } // Get total number of events created (high water mark) - uint8_t get_total_created() const { return this->total_created_; } + uint8_t get_total_created() const { return this->total_created_.load(std::memory_order_relaxed); } // Get number of events in the free list size_t get_free_count() const { return this->free_list_.size(); } private: LockFreeQueue free_list_; // Free events ready for reuse - uint8_t total_created_; // Total events created (high water mark) + std::atomic total_created_; // Total events created (high water mark) }; } // namespace esp32_ble } // namespace esphome -#endif \ No newline at end of file +#endif