Skip to content

Commit 91aa35e

Browse files
committed
Merge branch 'bugfix/mdns_service_memory_leak_3.2' into 'release/v3.2'
mdns: fix memory leak when query for service plus various other fixes (Backport v3.2) See merge request idf/esp-idf!4287
2 parents f1b2457 + 113e829 commit 91aa35e

File tree

3 files changed

+12
-6
lines changed

3 files changed

+12
-6
lines changed

components/mdns/mdns.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2741,8 +2741,10 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
27412741

27422742
if (search_result) {
27432743
if (search_result->type == MDNS_TYPE_PTR) {
2744-
result->port = port;
2745-
result->hostname = strdup(name->host);
2744+
if (!result->hostname) { // assign host/port for this entry only if not previously set
2745+
result->port = port;
2746+
result->hostname = strdup(name->host);
2747+
}
27462748
} else {
27472749
_mdns_search_result_add_srv(search_result, name->host, port, packet->tcpip_if, packet->ip_protocol);
27482750
}
@@ -2829,7 +2831,10 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
28292831
}
28302832
}
28312833
} else {
2832-
_mdns_search_result_add_txt(search_result, txt, txt_count, packet->tcpip_if, packet->ip_protocol);
2834+
_mdns_result_txt_create(data_ptr, data_len, &txt, &txt_count);
2835+
if (txt_count) {
2836+
_mdns_search_result_add_txt(search_result, txt, txt_count, packet->tcpip_if, packet->ip_protocol);
2837+
}
28332838
}
28342839
} else if (ours) {
28352840
if (parsed_packet->questions && !parsed_packet->probe) {
@@ -4015,8 +4020,6 @@ static esp_err_t _mdns_service_task_stop()
40154020
MDNS_SERVICE_LOCK();
40164021
_mdns_stop_timer();
40174022
MDNS_SERVICE_UNLOCK();
4018-
vSemaphoreDelete(_mdns_service_semaphore);
4019-
_mdns_service_semaphore = NULL;
40204023
if (_mdns_service_task_handle) {
40214024
mdns_action_t action;
40224025
mdns_action_t * a = &action;
@@ -4029,6 +4032,8 @@ static esp_err_t _mdns_service_task_stop()
40294032
vTaskDelay(10 / portTICK_PERIOD_MS);
40304033
}
40314034
}
4035+
vSemaphoreDelete(_mdns_service_semaphore);
4036+
_mdns_service_semaphore = NULL;
40324037
return ESP_OK;
40334038
}
40344039

components/mdns/mdns_networking.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,7 @@ static err_t _mdns_udp_pcb_write_api(struct tcpip_api_call_data *api_call_msg)
301301
mdns_pcb_t * _pcb = &_mdns_server->interfaces[msg->tcpip_if].pcbs[msg->ip_protocol];
302302
esp_err_t err = tcpip_adapter_get_netif(msg->tcpip_if, &nif);
303303
if (err) {
304+
pbuf_free(msg->pbt);
304305
msg->err = err;
305306
return err;
306307
}

examples/protocols/mdns/main/mdns_example_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ static void mdns_print_results(mdns_result_t * results){
143143
}
144144
a = r->addr;
145145
while(a){
146-
if(a->addr.type == MDNS_IP_PROTOCOL_V6){
146+
if(a->addr.type == IPADDR_TYPE_V6){
147147
printf(" AAAA: " IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6));
148148
} else {
149149
printf(" A : " IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4)));

0 commit comments

Comments
 (0)