From 84b1847a81c476adbb3402ac2f26dccdbb993bf0 Mon Sep 17 00:00:00 2001 From: David Sislak Date: Thu, 16 May 2019 20:26:49 +0200 Subject: [PATCH 1/2] Bugfix - write method of WiFiClient and WiFiClientSecure can stuck forever --- 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 5be690f247..61c631dfd2 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -455,7 +455,7 @@ class ClientContext break; } - ++_send_waiting; + _send_waiting = 1; esp_yield(); } while(true); _send_waiting = 0; From a964e816a8e493fee59d3cd65d3f9846bfaca8c9 Mon Sep 17 00:00:00 2001 From: David Sislak Date: Thu, 16 May 2019 22:50:50 +0200 Subject: [PATCH 2/2] Adjustment of uint8_t to bool to have it clear flag --- libraries/ESP8266WiFi/src/include/ClientContext.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index 61c631dfd2..0126621a67 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -437,7 +437,7 @@ class ClientContext size_t _write_from_source(DataSource* ds) { assert(_datasource == nullptr); - assert(_send_waiting == 0); + assert(!_send_waiting); _datasource = ds; _written = 0; _op_start_time = millis(); @@ -455,10 +455,10 @@ class ClientContext break; } - _send_waiting = 1; + _send_waiting = true; esp_yield(); } while(true); - _send_waiting = 0; + _send_waiting = false; if (_sync) wait_until_sent(); @@ -525,8 +525,8 @@ class ClientContext void _write_some_from_cb() { - if (_send_waiting == 1) { - _send_waiting--; + if (_send_waiting) { + _send_waiting = false; esp_schedule(); } } @@ -650,7 +650,7 @@ class ClientContext size_t _written = 0; uint32_t _timeout_ms = 5000; uint32_t _op_start_time = 0; - uint8_t _send_waiting = 0; + bool _send_waiting = false; uint8_t _connect_pending = 0; int8_t _refcnt;