From e6e1360b63ede491700c5e643fbce5fd6ecc6ebf Mon Sep 17 00:00:00 2001 From: David Sislak Date: Fri, 17 May 2019 10:48:59 +0200 Subject: [PATCH 1/4] Use bounded waiting instead of infinite one to avoid deadlock --- libraries/ESP8266WiFi/src/include/ClientContext.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index 0126621a67..2a8b5b2545 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -456,7 +456,7 @@ class ClientContext } _send_waiting = true; - esp_yield(); + delay(_timeout_ms); } while(true); _send_waiting = false; From 5665aa64b647a0e810ee231762bc56d79d855db2 Mon Sep 17 00:00:00 2001 From: David Sislak Date: Fri, 17 May 2019 10:51:35 +0200 Subject: [PATCH 2/4] Reduce timeout to fail much sooner if server is not acking our data --- libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp index 7ae53e6b91..0abd1796f4 100644 --- a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp @@ -1009,6 +1009,9 @@ bool WiFiClientSecure::_connectSSL(const char* hostName) { _x509_insecure = nullptr; _x509_knownkey = nullptr; + // reduce timeout after successful handshake to fail fast if server stop accepting our data for whathever reason + if (ret) _timeout = 5000; + return ret; } From c14a34abb4e51acd40ec30caa99131e72af9cb92 Mon Sep 17 00:00:00 2001 From: David Sislak Date: Fri, 17 May 2019 16:39:57 +0200 Subject: [PATCH 3/4] Return timeout to 15 seconds on every disconnect --- libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp index 0abd1796f4..b71a5fa7bf 100644 --- a/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClientSecureBearSSL.cpp @@ -248,6 +248,7 @@ void WiFiClientSecure::_freeSSL() { _recvapp_len = 0; // This connection is toast _handshake_done = false; + _timeout = 15000; } bool WiFiClientSecure::_clientConnected() { From c2b9cf92e09a7f9a5757bea3e170efbe3d95d825 Mon Sep 17 00:00:00 2001 From: David Sislak Date: Sun, 19 May 2019 06:49:14 +0200 Subject: [PATCH 4/4] Add comment to introduced delay to make it super clear --- libraries/ESP8266WiFi/src/include/ClientContext.h | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index 2a8b5b2545..2f2891510e 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -456,6 +456,7 @@ class ClientContext } _send_waiting = true; + // This delay will be interrupted by esp_schedule on next received ack delay(_timeout_ms); } while(true); _send_waiting = false;