From b9b948afb86db61f22582b2a97876e123be2f510 Mon Sep 17 00:00:00 2001 From: Larry Bernstone Date: Fri, 18 Sep 2020 16:57:18 -0600 Subject: [PATCH 1/2] If WebServer.handleClient is run in a tight loop, it will starve other processes. So, if there is no connection, throw in a delay(1). Fixes #4348 --- libraries/WebServer/src/WebServer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries/WebServer/src/WebServer.cpp b/libraries/WebServer/src/WebServer.cpp index e686f2fcd8c..5e820ebe827 100644 --- a/libraries/WebServer/src/WebServer.cpp +++ b/libraries/WebServer/src/WebServer.cpp @@ -278,6 +278,7 @@ void WebServer::serveStatic(const char* uri, FS& fs, const char* path, const cha void WebServer::handleClient() { if (_currentStatus == HC_NONE) { + delay(1); WiFiClient client = _server.available(); if (!client) { return; From 27a76a4beb65e266483f492e1db150c053135bae Mon Sep 17 00:00:00 2001 From: Larry Bernstone Date: Sat, 19 Sep 2020 07:49:02 -0600 Subject: [PATCH 2/2] Made a variable to control the delay behavior --- libraries/WebServer/src/WebServer.cpp | 10 +++++++++- libraries/WebServer/src/WebServer.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libraries/WebServer/src/WebServer.cpp b/libraries/WebServer/src/WebServer.cpp index 5e820ebe827..e4ffdf54a84 100644 --- a/libraries/WebServer/src/WebServer.cpp +++ b/libraries/WebServer/src/WebServer.cpp @@ -45,6 +45,7 @@ WebServer::WebServer(IPAddress addr, int port) , _currentVersion(0) , _currentStatus(HC_NONE) , _statusChange(0) +, _nullDelay(true) , _currentHandler(nullptr) , _firstHandler(nullptr) , _lastHandler(nullptr) @@ -66,6 +67,7 @@ WebServer::WebServer(int port) , _currentVersion(0) , _currentStatus(HC_NONE) , _statusChange(0) +, _nullDelay(true) , _currentHandler(nullptr) , _firstHandler(nullptr) , _lastHandler(nullptr) @@ -278,9 +280,11 @@ void WebServer::serveStatic(const char* uri, FS& fs, const char* path, const cha void WebServer::handleClient() { if (_currentStatus == HC_NONE) { - delay(1); WiFiClient client = _server.available(); if (!client) { + if (_nullDelay) { + delay(1); + } return; } @@ -371,6 +375,10 @@ void WebServer::setContentLength(const size_t contentLength) { _contentLength = contentLength; } +void WebServer::enableDelay(boolean value) { + _nullDelay = value; +} + void WebServer::enableCORS(boolean value) { _corsEnabled = value; } diff --git a/libraries/WebServer/src/WebServer.h b/libraries/WebServer/src/WebServer.h index a0d3a1c1cfe..76609d6fca2 100644 --- a/libraries/WebServer/src/WebServer.h +++ b/libraries/WebServer/src/WebServer.h @@ -123,6 +123,7 @@ class WebServer void send_P(int code, PGM_P content_type, PGM_P content); void send_P(int code, PGM_P content_type, PGM_P content, size_t contentLength); + void enableDelay(boolean value); void enableCORS(boolean value = true); void enableCrossOrigin(boolean value = true); @@ -176,6 +177,7 @@ class WebServer uint8_t _currentVersion; HTTPClientStatus _currentStatus; unsigned long _statusChange; + boolean _nullDelay; RequestHandler* _currentHandler; RequestHandler* _firstHandler;