From 292ad3848381c425fe8ccf9e7bddb6033d17bed0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20Sier=C5=BC=C4=99ga?= Date: Tue, 11 Feb 2020 11:54:06 +0100 Subject: [PATCH] DNS resolving timeout change to prevent stack overlapping Real DNS resolving timeout used by lwip library is 14[s] (7[s] for DNS1 + 7[s] for DNS2). Function WiFiGenericClass::hostByName() has timeout set to lower value (only 4[s]), so callback function may be called after this low timeout and it may overlappe stack memory used now by other function. Fixes #3722 --- libraries/WiFi/src/WiFiGeneric.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/WiFi/src/WiFiGeneric.cpp b/libraries/WiFi/src/WiFiGeneric.cpp index 50fb56f4962..a28acc2b9bb 100644 --- a/libraries/WiFi/src/WiFiGeneric.cpp +++ b/libraries/WiFi/src/WiFiGeneric.cpp @@ -664,13 +664,13 @@ int WiFiGenericClass::hostByName(const char* aHostname, IPAddress& aResult) { ip_addr_t addr; aResult = static_cast(0); - waitStatusBits(WIFI_DNS_IDLE_BIT, 5000); - clearStatusBits(WIFI_DNS_IDLE_BIT); + waitStatusBits(WIFI_DNS_IDLE_BIT, 16000); + clearStatusBits(WIFI_DNS_IDLE_BIT | WIFI_DNS_DONE_BIT); err_t err = dns_gethostbyname(aHostname, &addr, &wifi_dns_found_callback, &aResult); if(err == ERR_OK && addr.u_addr.ip4.addr) { aResult = addr.u_addr.ip4.addr; } else if(err == ERR_INPROGRESS) { - waitStatusBits(WIFI_DNS_DONE_BIT, 4000); + waitStatusBits(WIFI_DNS_DONE_BIT, 15000); //real internal timeout in lwip library is 14[s] clearStatusBits(WIFI_DNS_DONE_BIT); } setStatusBits(WIFI_DNS_IDLE_BIT);