Merge pull request #8418 from tannewt/fix_mdns_crash_after_user_disconnect

Fix MDNS after the user turns off wifi
This commit is contained in:
Dan Halbert 2023-09-21 14:18:23 -04:00 committed by GitHub
commit 37180b28dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 8 deletions

View File

@ -36,16 +36,22 @@
// Track whether the underlying IDF mdns has been started so that we only // Track whether the underlying IDF mdns has been started so that we only
// create a single inited MDNS object to CircuitPython. (After deinit, another // create a single inited MDNS object to CircuitPython. (After deinit, another
// could be created.) // could be created.)
STATIC bool mdns_started = false; STATIC mdns_server_obj_t *_active_object = NULL;
void mdns_server_construct(mdns_server_obj_t *self, bool workflow) { void mdns_server_construct(mdns_server_obj_t *self, bool workflow) {
if (mdns_started) { if (_active_object != NULL) {
if (self == _active_object) {
return;
}
// Mark this object as deinited because another is already using MDNS. // Mark this object as deinited because another is already using MDNS.
self->inited = false; self->inited = false;
return; return;
} }
mdns_init(); esp_err_t ret = mdns_init();
mdns_started = true; if (ret != ESP_OK) {
return;
}
_active_object = self;
uint8_t mac[6]; uint8_t mac[6];
esp_netif_get_mac(common_hal_wifi_radio_obj.netif, mac); esp_netif_get_mac(common_hal_wifi_radio_obj.netif, mac);
@ -86,10 +92,16 @@ void common_hal_mdns_server_deinit(mdns_server_obj_t *self) {
return; return;
} }
self->inited = false; self->inited = false;
mdns_started = false; _active_object = NULL;
mdns_free(); mdns_free();
} }
void mdns_server_deinit_singleton(void) {
if (_active_object != NULL) {
common_hal_mdns_server_deinit(_active_object);
}
}
bool common_hal_mdns_server_deinited(mdns_server_obj_t *self) { bool common_hal_mdns_server_deinited(mdns_server_obj_t *self) {
return !self->inited; return !self->inited;
} }

View File

@ -36,3 +36,5 @@ typedef struct {
// Track if this object owns access to the underlying MDNS service. // Track if this object owns access to the underlying MDNS service.
bool inited; bool inited;
} mdns_server_obj_t; } mdns_server_obj_t;
void mdns_server_deinit_singleton(void);

View File

@ -44,7 +44,7 @@
#include "components/lwip/include/apps/ping/ping_sock.h" #include "components/lwip/include/apps/ping/ping_sock.h"
#if CIRCUITPY_MDNS #if CIRCUITPY_MDNS
#include "components/mdns/include/mdns.h" #include "common-hal/mdns/Server.h"
#endif #endif
#define MAC_ADDRESS_LENGTH 6 #define MAC_ADDRESS_LENGTH 6
@ -97,7 +97,7 @@ void common_hal_wifi_radio_set_enabled(wifi_radio_obj_t *self, bool enabled) {
common_hal_wifi_radio_stop_scanning_networks(self); common_hal_wifi_radio_stop_scanning_networks(self);
} }
#if CIRCUITPY_MDNS #if CIRCUITPY_MDNS
mdns_free(); mdns_server_deinit_singleton();
#endif #endif
ESP_ERROR_CHECK(esp_wifi_stop()); ESP_ERROR_CHECK(esp_wifi_stop());
self->started = false; self->started = false;

@ -1 +1 @@
Subproject commit 630c2724fc8c69eeaaa1bb025de52b99c5cb11aa Subproject commit b6b7a7aad56ede8f2d4e213c3dd3621dacc34122