From 817c4fd2e8a0fd9c42a159c4d61779dc93e2f172 Mon Sep 17 00:00:00 2001 From: David Cermak Date: Mon, 9 Dec 2019 11:29:19 +0100 Subject: [PATCH] mdns: fixed crash on event during deinit mdns library deinitialization destroys internal structures including action queue. if an event (e.g. network update) received after some essential stucture is destoyed, an unexpected behavour might be introduced (e.g. crash of adding the event notification to the action queue which was already destroyed Closes WIFI-1485 * Original commit: espressif/esp-idf@eaa2f12d6761710d2633b4934fe09f6f45e20f4f --- components/mdns/mdns.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 83e9be71a..f04d4d192 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -4301,6 +4301,14 @@ void mdns_free(void) if (!_mdns_server) { return; } + + // Unregister handlers before destoying the mdns internals to avoid receiving asyc events while deinit + esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler); + esp_event_handler_unregister(IP_EVENT, ESP_EVENT_ANY_ID, &event_handler); +#if CONFIG_ETH_ENABLED + esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, &event_handler); +#endif + mdns_service_remove_all(); _mdns_service_task_stop(); for (i=0; ilock); - esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler); - esp_event_handler_unregister(IP_EVENT, ESP_EVENT_ANY_ID, &event_handler); -#if CONFIG_ETH_ENABLED - esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, &event_handler); -#endif free(_mdns_server); _mdns_server = NULL; }