From bcfc88681d7f7dd550287674be3d53ae103b4ef2 Mon Sep 17 00:00:00 2001 From: Konstantin Kondrashov Date: Tue, 7 Jul 2026 17:26:55 +0300 Subject: [PATCH] fix(esp_event): clear running_task before releasing mutex on tick timeout When esp_event_loop_run() exited via the ticks-expired break path, loop->running_task was left pointing to the current task handle. Any subsequent trylock in esp_event_handler_unregister_with_internal() would see a stale non-NULL running_task and take the wrong code path. --- components/esp_event/esp_event.c | 1 + 1 file changed, 1 insertion(+) diff --git a/components/esp_event/esp_event.c b/components/esp_event/esp_event.c index a1cef32f8e0..f80a6b27ed7 100644 --- a/components/esp_event/esp_event.c +++ b/components/esp_event/esp_event.c @@ -728,6 +728,7 @@ esp_err_t esp_event_loop_run(esp_event_loop_handle_t event_loop, TickType_t tick remaining_ticks -= end - marker; // If the ticks to run expired, return to the caller if (remaining_ticks <= 0) { + loop->running_task = NULL; xSemaphoreGiveRecursive(loop->mutex); break; } else {