Skip to content

Commit 817c4fd

Browse files
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@eaa2f12
1 parent 8f0dc6d commit 817c4fd

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

components/mdns/mdns.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4301,6 +4301,14 @@ void mdns_free(void)
43014301
if (!_mdns_server) {
43024302
return;
43034303
}
4304+
4305+
// Unregister handlers before destoying the mdns internals to avoid receiving asyc events while deinit
4306+
esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler);
4307+
esp_event_handler_unregister(IP_EVENT, ESP_EVENT_ANY_ID, &event_handler);
4308+
#if CONFIG_ETH_ENABLED
4309+
esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, &event_handler);
4310+
#endif
4311+
43044312
mdns_service_remove_all();
43054313
_mdns_service_task_stop();
43064314
for (i=0; i<MDNS_IF_MAX; i++) {
@@ -4331,11 +4339,6 @@ void mdns_free(void)
43314339
free(h);
43324340
}
43334341
vSemaphoreDelete(_mdns_server->lock);
4334-
esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler);
4335-
esp_event_handler_unregister(IP_EVENT, ESP_EVENT_ANY_ID, &event_handler);
4336-
#if CONFIG_ETH_ENABLED
4337-
esp_event_handler_unregister(ETH_EVENT, ESP_EVENT_ANY_ID, &event_handler);
4338-
#endif
43394342
free(_mdns_server);
43404343
_mdns_server = NULL;
43414344
}

0 commit comments

Comments
 (0)