From e1bd49cbc0e83c3f69dabe77bb33164f2d6aaf9d Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Fri, 15 Aug 2025 17:10:13 +0200 Subject: [PATCH] Fix for icon registration leak --- .../Source/service/statusbar/Statusbar.cpp | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Tactility/Source/service/statusbar/Statusbar.cpp b/Tactility/Source/service/statusbar/Statusbar.cpp index d7b1ae8f..06059cd6 100644 --- a/Tactility/Source/service/statusbar/Statusbar.cpp +++ b/Tactility/Source/service/statusbar/Statusbar.cpp @@ -130,20 +130,18 @@ static _Nullable const char* getPowerStatusIcon() { class StatusbarService final : public Service { -private: - Mutex mutex; std::unique_ptr updateTimer; - int8_t gps_icon_id = lvgl::statusbar_icon_add(); + int8_t gps_icon_id; bool gps_last_state = false; - int8_t wifi_icon_id = lvgl::statusbar_icon_add(); + int8_t wifi_icon_id; const char* wifi_last_icon = nullptr; - int8_t sdcard_icon_id = lvgl::statusbar_icon_add(); + int8_t sdcard_icon_id; const char* sdcard_last_icon = nullptr; - int8_t power_icon_id = lvgl::statusbar_icon_add(); + int8_t power_icon_id; const char* power_last_icon = nullptr; - std::unique_ptr paths; + std::unique_ptr paths; void lock() const { mutex.lock(); @@ -154,7 +152,7 @@ private: } void updateGpsIcon() { - auto gps_state = service::gps::findGpsService()->getState(); + auto gps_state = gps::findGpsService()->getState(); bool show_icon = (gps_state == gps::State::OnPending) || (gps_state == gps::State::On); if (gps_last_state != show_icon) { if (show_icon) { @@ -199,7 +197,7 @@ private: } void updateSdCardIcon() { - auto sdcard = tt::hal::getConfiguration()->sdcard; + auto sdcard = hal::getConfiguration()->sdcard; if (sdcard != nullptr) { auto state = sdcard->getState(); if (state != hal::sdcard::SdCardDevice::State::Unknown) { @@ -229,10 +227,18 @@ private: public: - ~StatusbarService() final { + StatusbarService() { + gps_icon_id = lvgl::statusbar_icon_add(); + sdcard_icon_id = lvgl::statusbar_icon_add(); + wifi_icon_id = lvgl::statusbar_icon_add(); + power_icon_id = lvgl::statusbar_icon_add(); + } + + ~StatusbarService() override { lvgl::statusbar_icon_remove(wifi_icon_id); lvgl::statusbar_icon_remove(sdcard_icon_id); lvgl::statusbar_icon_remove(power_icon_id); + lvgl::statusbar_icon_remove(gps_icon_id); } void onStart(ServiceContext& serviceContext) override { @@ -245,7 +251,7 @@ public: assert(service); onUpdate(service); - updateTimer = std::make_unique(Timer::Type::Periodic, [service]() { + updateTimer = std::make_unique(Timer::Type::Periodic, [service] { onUpdate(service); });