M module-sys/Service/Worker.cpp => module-sys/Service/Worker.cpp +8 -1
@@ 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;
}
M module-sys/Service/include/Service/Worker.hpp => module-sys/Service/include/Service/Worker.hpp +1 -1
@@ 103,7 103,7 @@ namespace sys
static constexpr std::size_t controlMessagesCount = static_cast<std::size_t>(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;