From 4c661d4f2c736d3cbc13614864511873efc48678 Mon Sep 17 00:00:00 2001 From: Lukasz Mastalerz Date: Mon, 31 Jul 2023 10:54:34 +0200 Subject: [PATCH] [BH-1412] Improve system shutdown procedure Changed default Worker join timeout to a more realistic value in case of system shutdown procedure. --- module-sys/Service/Worker.cpp | 9 ++++++++- module-sys/Service/include/Service/Worker.hpp | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/module-sys/Service/Worker.cpp b/module-sys/Service/Worker.cpp index 5d715bd24d6e2eba28f510982d9bd1ee10e6c2df..05df450e4e8634128021650b8b8b33346eaa4200 100644 --- a/module-sys/Service/Worker.cpp +++ b/module-sys/Service/Worker.cpp @@ -265,9 +265,16 @@ namespace sys { assert(getState() == State::Running || getState() == State::Stopped); if (xSemaphoreTake(joinSemaphore, timeout) != pdTRUE) { + LOG_ERROR("Failed to take semaphore!"); return false; } - while (eTaskGetState(taskHandle) != eDeleted) {} + const auto waitDeleteTaskTick = xTaskGetTickCount(); + while (eTaskGetState(taskHandle) != eDeleted) { + if ((xTaskGetTickCount() - waitDeleteTaskTick) > timeout) { + LOG_ERROR("Task waiting aborted (timeout). TaskState != eDeleted"); + return false; + } + } return true; } diff --git a/module-sys/Service/include/Service/Worker.hpp b/module-sys/Service/include/Service/Worker.hpp index 5b23c4b8ee0ec4fb96f7d7f3886775b053cd5da7..d6f72750ee7642bc3b46d914eb6c734f0a750f86 100644 --- a/module-sys/Service/include/Service/Worker.hpp +++ b/module-sys/Service/include/Service/Worker.hpp @@ -103,7 +103,7 @@ namespace sys static constexpr std::size_t controlMessagesCount = static_cast(ControlMessage::MessageCount); static constexpr std::size_t defaultStackSize = 8192; - static constexpr TickType_t defaultJoinTimeout = portMAX_DELAY; + static constexpr TickType_t defaultJoinTimeout = pdMS_TO_TICKS(500); static constexpr auto controlQueueNamePrefix = "wctrl"; xSemaphoreHandle joinSemaphore = nullptr;