Skip to content

Commit b15cd2d

Browse files
committed
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.
1 parent f150e23 commit b15cd2d

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/core/dns.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,13 @@ dns_setserver(u8_t numdns, const ip_addr_t *dnsserver)
408408
void
409409
dns_clear_cache(void)
410410
{
411+
u8_t i=0;
412+
for (i = 0; i < DNS_TABLE_SIZE; i++) {
413+
if (dns_table[i].state != DNS_STATE_UNUSED) {
414+
dns_call_found(i, NULL);
415+
}
416+
}
417+
411418
memset(dns_table, 0, sizeof(struct dns_table_entry) * DNS_TABLE_SIZE);
412419
}
413420

0 commit comments

Comments
 (0)