From eaa2f12d6761710d2633b4934fe09f6f45e20f4f 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 --- 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 83e9be71a1..f04d4d1922 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; }