From 58ed22461fc5dc9b93dedf154d3c839c026eb73a Mon Sep 17 00:00:00 2001 From: David Cermak Date: Mon, 4 Mar 2019 12:32:10 +0100 Subject: [PATCH] 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 --- components/mdns/mdns.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/components/mdns/mdns.c b/components/mdns/mdns.c index 268f7c280..b8c7edb99 100644 --- a/components/mdns/mdns.c +++ b/components/mdns/mdns.c @@ -4084,12 +4084,6 @@ esp_err_t mdns_init() goto free_lock; } - if (_mdns_service_task_start()) { - //service start failed! - err = ESP_FAIL; - goto free_all; - } - uint8_t i; ip6_addr_t tmp_addr6; tcpip_adapter_ip_info_t if_ip_info; @@ -4103,9 +4097,19 @@ esp_err_t mdns_init() } } + if (_mdns_service_task_start()) { + //service start failed! + err = ESP_FAIL; + goto free_all_and_disable_pcbs; + } + return ESP_OK; -free_all: +free_all_and_disable_pcbs: + for (i=0; iaction_queue); free_lock: vSemaphoreDelete(_mdns_server->lock);