diff --git a/esp32/lib/ESP32-sveltekit/AnalyticsService.h b/esp32/lib/ESP32-sveltekit/AnalyticsService.h index 92f5f90..7841d9c 100644 --- a/esp32/lib/ESP32-sveltekit/AnalyticsService.h +++ b/esp32/lib/ESP32-sveltekit/AnalyticsService.h @@ -52,8 +52,7 @@ class AnalyticsService { doc["cpu0_usage"] = _taskManager->getCpuUsage(0); doc["cpu1_usage"] = _taskManager->getCpuUsage(1); doc["cpu_usage"] = _taskManager->getCpuUsage(); - // Add _taskManager->getTaskNames() as a JSON array - JsonArray tasks = doc["tasks"].as(); + JsonArray tasks = doc["tasks"].to(); for (auto const &task : _taskManager->getTasks()) { JsonObject nested = tasks.add(); nested["name"] = task.name; diff --git a/esp32/lib/ESP32-sveltekit/TaskManager.h b/esp32/lib/ESP32-sveltekit/TaskManager.h index e4a8d80..5fe4da1 100644 --- a/esp32/lib/ESP32-sveltekit/TaskManager.h +++ b/esp32/lib/ESP32-sveltekit/TaskManager.h @@ -84,6 +84,7 @@ class TaskManager { } std::vector getTasks() { + update(); std::vector tasks; for (auto const &task : _tasks) tasks.push_back(task.second); return tasks; @@ -94,9 +95,15 @@ class TaskManager { int getKernelTaskCount() const { return uxTaskGetNumberOfTasks(); } void update() { - for (auto const &task : _tasks) { - _tasks[task.first].priority = uxTaskPriorityGet(task.second.handle); - _tasks[task.first].coreId = xTaskGetAffinity(task.second.handle); + for (auto task = _tasks.begin(); task != _tasks.end();) { + eTaskState state = eTaskGetState(task->second.handle); + if (state == eDeleted) { + task = _tasks.erase(task); + } else { + _tasks[task->first].priority = uxTaskPriorityGet(task->second.handle); + _tasks[task->first].coreId = xTaskGetAffinity(task->second.handle); + ++task; + } } }