From e2eee2fddeb221c2d32a0f1fb573243ff12aa2fb Mon Sep 17 00:00:00 2001 From: mikee47 Date: Wed, 17 Sep 2025 09:21:46 +0100 Subject: [PATCH] Fix esp32 tcpip message starvation Limit sming task processing to only those messages waiting in the queue. When heavily stressed, loop never exits and tcpip messages don't get serviced. --- Sming/Arch/Esp32/Components/esp32/src/tasks.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Sming/Arch/Esp32/Components/esp32/src/tasks.cpp b/Sming/Arch/Esp32/Components/esp32/src/tasks.cpp index bcd48565f5..a36ef1c19f 100644 --- a/Sming/Arch/Esp32/Components/esp32/src/tasks.cpp +++ b/Sming/Arch/Esp32/Components/esp32/src/tasks.cpp @@ -33,8 +33,10 @@ volatile bool eventQueueFlag; void tcpip_message_handler(void*) { eventQueueFlag = false; + // Process only waiting messages (not newly posted ones) so tcpip doesn't starve + auto messageCount = uxQueueMessagesWaiting(eventQueue); os_event_t evt; - while(xQueueReceive(eventQueue, &evt, 0) == pdTRUE) { + while(messageCount-- && xQueueReceive(eventQueue, &evt, 0) == pdTRUE) { taskCallback(&evt); } }