From b15cd2de75d408f9f813367571143b9bcff20738 Mon Sep 17 00:00:00 2001 From: Abhik Roy Date: Mon, 19 Aug 2024 23:52:44 +1000 Subject: [PATCH] dns: Handle active DNS entries before clearing cache Issue: A bug was identified where calling dns_clear_cache() after a DNS query request but before the query response is received causes the dns_clear_cache() function to clear the dns_table database. This results in the netconn layer waiting indefinitely for the dns_call_found() callback, leading to a deadlock. Resolution: Added logic to invoke dns_call_found() for any active DNS entries before clearing the entire DNS cache in the dns_clear_cache() function. This change ensures that in-use entries are handled properly, preventing the system from entering a deadlock state. --- src/core/dns.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/core/dns.c b/src/core/dns.c index a740458bf..d2aa4d1b9 100644 --- a/src/core/dns.c +++ b/src/core/dns.c @@ -408,6 +408,13 @@ dns_setserver(u8_t numdns, const ip_addr_t *dnsserver) void dns_clear_cache(void) { + u8_t i=0; + for (i = 0; i < DNS_TABLE_SIZE; i++) { + if (dns_table[i].state != DNS_STATE_UNUSED) { + dns_call_found(i, NULL); + } + } + memset(dns_table, 0, sizeof(struct dns_table_entry) * DNS_TABLE_SIZE); }