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@eaa2f12d67
This commit is contained in:
David Cermak
2019-12-09 11:29:19 +01:00
committed by suren-gabrielyan-espressif
parent 8f0dc6d578
commit 817c4fd2e8

View File

@ -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; i<MDNS_IF_MAX; i++) {
@ -4331,11 +4339,6 @@ void mdns_free(void)
free(h);
}
vSemaphoreDelete(_mdns_server->lock);
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;
}