Skip to content

Commit ee2fe99

Browse files
committed
Fix repeated MDNS use on Pico W
1 parent 5c517b7 commit ee2fe99

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

ports/raspberrypi/common-hal/mdns/Server.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,21 +36,28 @@
3636
#include "lwip/apps/mdns.h"
3737
#include "lwip/prot/dns.h"
3838

39+
// Track if we've inited the LWIP MDNS at all. It expects to only init once.
40+
// Subsequent times, we restart it.
41+
STATIC bool inited = false;
3942
// Track if we are globally inited. This essentially forces one inited MDNS
4043
// object at a time. (But ignores MDNS objects that are deinited.)
41-
STATIC bool inited = false;
44+
STATIC bool object_inited = false;
4245

4346
#define NETIF_STA (&cyw43_state.netif[CYW43_ITF_STA])
4447
#define NETIF_AP (&cyw43_state.netif[CYW43_ITF_AP])
4548

4649
void mdns_server_construct(mdns_server_obj_t *self, bool workflow) {
47-
if (inited) {
50+
if (object_inited) {
4851
self->inited = false;
4952
return;
5053
}
5154

52-
mdns_resp_init();
53-
inited = true;
55+
if (!inited) {
56+
mdns_resp_init();
57+
inited = true;
58+
} else {
59+
mdns_resp_restart(NETIF_STA);
60+
}
5461
self->inited = true;
5562

5663
uint8_t mac[6];
@@ -72,7 +79,7 @@ void common_hal_mdns_server_construct(mdns_server_obj_t *self, mp_obj_t network_
7279
mp_raise_ValueError(translate("mDNS only works with built-in WiFi"));
7380
return;
7481
}
75-
if (inited) {
82+
if (object_inited) {
7683
mp_raise_RuntimeError(translate("mDNS already initialized"));
7784
}
7885
mdns_server_construct(self, false);
@@ -83,7 +90,7 @@ void common_hal_mdns_server_deinit(mdns_server_obj_t *self) {
8390
return;
8491
}
8592
self->inited = false;
86-
inited = false;
93+
object_inited = false;
8794
mdns_resp_remove_netif(NETIF_STA);
8895
}
8996

shared-bindings/mdns/Server.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ STATIC mp_obj_t mdns_server_make_new(const mp_obj_type_t *type, size_t n_args, s
6464
}
6565
#endif
6666

67-
mdns_server_obj_t *self = m_new_obj(mdns_server_obj_t);
67+
mdns_server_obj_t *self = m_new_obj_with_finaliser(mdns_server_obj_t);
6868
self->base.type = &mdns_server_type;
6969
common_hal_mdns_server_construct(self, args[ARG_network_interface].u_obj);
7070

@@ -205,6 +205,7 @@ STATIC const mp_rom_map_elem_t mdns_server_locals_dict_table[] = {
205205
{ MP_ROM_QSTR(MP_QSTR_find), MP_ROM_PTR(&mdns_server_find_obj) },
206206
{ MP_ROM_QSTR(MP_QSTR_advertise_service), MP_ROM_PTR(&mdns_server_advertise_service_obj) },
207207

208+
{ MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&mdns_server_deinit_obj) },
208209
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&mdns_server_deinit_obj) },
209210
};
210211

0 commit comments

Comments
 (0)