Merge branch 'bugfix/mdns_service_memory_leak_3.1' into 'release/v3.1'
mdns: fix memory leak when query for service plus various other fixes (Backport v3.1) See merge request idf/esp-idf!4313
This commit is contained in:
commit
dda1af6e55
3 changed files with 12 additions and 4 deletions
|
@ -2726,8 +2726,10 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
|
||||||
|
|
||||||
if (search_result) {
|
if (search_result) {
|
||||||
if (search_result->type == MDNS_TYPE_PTR) {
|
if (search_result->type == MDNS_TYPE_PTR) {
|
||||||
|
if (!result->hostname) { // assign host/port for this entry only if not previously set
|
||||||
result->port = port;
|
result->port = port;
|
||||||
result->hostname = strdup(name->host);
|
result->hostname = strdup(name->host);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_mdns_search_result_add_srv(search_result, name->host, port, packet->tcpip_if, packet->ip_protocol);
|
_mdns_search_result_add_srv(search_result, name->host, port, packet->tcpip_if, packet->ip_protocol);
|
||||||
}
|
}
|
||||||
|
@ -2814,8 +2816,11 @@ void mdns_parse_packet(mdns_rx_packet_t * packet)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
_mdns_result_txt_create(data_ptr, data_len, &txt, &txt_count);
|
||||||
|
if (txt_count) {
|
||||||
_mdns_search_result_add_txt(search_result, txt, txt_count, packet->tcpip_if, packet->ip_protocol);
|
_mdns_search_result_add_txt(search_result, txt, txt_count, packet->tcpip_if, packet->ip_protocol);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else if (ours) {
|
} else if (ours) {
|
||||||
if (parsed_packet->questions && !parsed_packet->probe) {
|
if (parsed_packet->questions && !parsed_packet->probe) {
|
||||||
_mdns_remove_parsed_question(parsed_packet, type, service);
|
_mdns_remove_parsed_question(parsed_packet, type, service);
|
||||||
|
@ -4009,6 +4014,8 @@ static esp_err_t _mdns_service_task_stop()
|
||||||
vTaskDelay(10 / portTICK_PERIOD_MS);
|
vTaskDelay(10 / portTICK_PERIOD_MS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
vSemaphoreDelete(_mdns_service_semaphore);
|
||||||
|
_mdns_service_semaphore = NULL;
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -272,6 +272,7 @@ static err_t _mdns_udp_pcb_write_api(struct tcpip_api_call *api_call_msg)
|
||||||
mdns_pcb_t * _pcb = &_mdns_server->interfaces[msg->tcpip_if].pcbs[msg->ip_protocol];
|
mdns_pcb_t * _pcb = &_mdns_server->interfaces[msg->tcpip_if].pcbs[msg->ip_protocol];
|
||||||
esp_err_t err = tcpip_adapter_get_netif(msg->tcpip_if, &nif);
|
esp_err_t err = tcpip_adapter_get_netif(msg->tcpip_if, &nif);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
pbuf_free(msg->pbt);
|
||||||
msg->err = err;
|
msg->err = err;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,7 +143,7 @@ static void mdns_print_results(mdns_result_t * results){
|
||||||
}
|
}
|
||||||
a = r->addr;
|
a = r->addr;
|
||||||
while(a){
|
while(a){
|
||||||
if(a->addr.type == MDNS_IP_PROTOCOL_V6){
|
if(a->addr.type == IPADDR_TYPE_V6){
|
||||||
printf(" AAAA: " IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6));
|
printf(" AAAA: " IPV6STR "\n", IPV62STR(a->addr.u_addr.ip6));
|
||||||
} else {
|
} else {
|
||||||
printf(" A : " IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4)));
|
printf(" A : " IPSTR "\n", IP2STR(&(a->addr.u_addr.ip4)));
|
||||||
|
|
Loading…
Reference in a new issue