forked from espressif/esp-protocols
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:
1 parent
8f0dc6d578
commit
817c4fd2e8
1 file changed
+8
-5
@@ -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;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user