Skip to content

Commit 2763bcd

Browse files
mdns: skip sending search when finished, not properly locked timer task
* Original commit: espressif/esp-idf@31163f0
1 parent dce0b26 commit 2763bcd

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

components/mdns/mdns.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3480,6 +3480,22 @@ static void _mdns_search_send_pcb(mdns_search_once_t * search, tcpip_adapter_if_
34803480
*/
34813481
static void _mdns_search_send(mdns_search_once_t * search)
34823482
{
3483+
mdns_search_once_t* queue = _mdns_server->search_once;
3484+
bool found = false;
3485+
// looking for this search in active searches
3486+
while (queue) {
3487+
if (queue == search) {
3488+
found = true;
3489+
break;
3490+
}
3491+
queue = queue->next;
3492+
}
3493+
3494+
if (!found) {
3495+
// no longer active -> skip sending this search
3496+
return;
3497+
}
3498+
34833499
uint8_t i, j;
34843500
for (i=0; i<TCPIP_ADAPTER_IF_MAX; i++) {
34853501
for (j=0; j<MDNS_IP_PROTOCOL_MAX; j++) {
@@ -3822,12 +3838,13 @@ static void _mdns_scheduler_run()
38223838
*/
38233839
static void _mdns_search_run()
38243840
{
3841+
MDNS_SERVICE_LOCK();
38253842
mdns_search_once_t * s = _mdns_server->search_once;
38263843
uint32_t now = xTaskGetTickCount() * portTICK_PERIOD_MS;
38273844
if (!s) {
3845+
MDNS_SERVICE_UNLOCK();
38283846
return;
38293847
}
3830-
MDNS_SERVICE_LOCK();
38313848
while (s) {
38323849
if (s->state != SEARCH_OFF) {
38333850
if (now > (s->started_at + s->timeout)) {

0 commit comments

Comments
 (0)