Skip to content

Commit 75deebb

Browse files
mdns: enable pcbs before starting service thread to avoid updating pcb's internal variables from concurent tasks
possible race condition: user task runs mdns_init, which enables pcbs while mdns-task already created could execute enable/disable of the same pcbs if an appropriate system event received * Original commit: espressif/esp-idf@c87f0cb
1 parent fdd27dc commit 75deebb

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

components/mdns/mdns.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4107,12 +4107,6 @@ esp_err_t mdns_init()
41074107
goto free_lock;
41084108
}
41094109

4110-
if (_mdns_service_task_start()) {
4111-
//service start failed!
4112-
err = ESP_FAIL;
4113-
goto free_all;
4114-
}
4115-
41164110
uint8_t i;
41174111
ip6_addr_t tmp_addr6;
41184112
tcpip_adapter_ip_info_t if_ip_info;
@@ -4126,9 +4120,19 @@ esp_err_t mdns_init()
41264120
}
41274121
}
41284122

4123+
if (_mdns_service_task_start()) {
4124+
//service start failed!
4125+
err = ESP_FAIL;
4126+
goto free_all_and_disable_pcbs;
4127+
}
4128+
41294129
return ESP_OK;
41304130

4131-
free_all:
4131+
free_all_and_disable_pcbs:
4132+
for (i=0; i<TCPIP_ADAPTER_IF_MAX; i++) {
4133+
_mdns_disable_pcb(i, MDNS_IP_PROTOCOL_V6);
4134+
_mdns_disable_pcb(i, MDNS_IP_PROTOCOL_V4);
4135+
}
41324136
vQueueDelete(_mdns_server->action_queue);
41334137
free_lock:
41344138
vSemaphoreDelete(_mdns_server->lock);

0 commit comments

Comments
 (0)