From e557ed94fb5f8c26108b92fb80035732e58d0a69 Mon Sep 17 00:00:00 2001 From: Marius Vikhammer Date: Thu, 14 Sep 2023 13:16:46 +0800 Subject: [PATCH] fix(wdt): fixed potential WDT timeout when deinitializing task watchdog If task WDT deinit was called from core 1 it would cause an interrupt WDT timeout --- components/esp_system/task_wdt.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/components/esp_system/task_wdt.c b/components/esp_system/task_wdt.c index cde04ce719..d724b9e2bc 100644 --- a/components/esp_system/task_wdt.c +++ b/components/esp_system/task_wdt.c @@ -252,10 +252,14 @@ esp_err_t esp_task_wdt_deinit(void) //Disable hardware timer wdt_hal_deinit(&twdt_context); - ESP_ERROR_CHECK(esp_intr_free(twdt_config->intr_handle)); //Unregister interrupt - free(twdt_config); //Free twdt_config + /* Need to exit critical section to free interrupt (potential IPC call), store and clear config before exiting */ + twdt_config_t *twdt_config_temp = twdt_config; twdt_config = NULL; portEXIT_CRITICAL(&twdt_spinlock); + + ESP_ERROR_CHECK(esp_intr_free(twdt_config_temp->intr_handle)); //Unregister interrupt + free(twdt_config_temp); //Free twdt_config + return ESP_OK; }