1
0
mirror of https://github.com/esphome/esphome.git synced 2025-10-24 20:53:48 +01:00

Fix race condition in web_server scheduler on ESP32 (#3951)

This commit is contained in:
tomaszduda23
2022-12-22 16:51:24 +09:00
committed by GitHub
parent ff4fd497c4
commit 50e8e92f0b
2 changed files with 64 additions and 20 deletions

View File

@@ -9,7 +9,11 @@
#include "esphome/core/controller.h"
#include <vector>
#ifdef USE_ESP32
#include <deque>
#include <freertos/FreeRTOS.h>
#include <freertos/semphr.h>
#endif
namespace esphome {
namespace web_server {
@@ -34,7 +38,7 @@ enum JsonDetail { DETAIL_ALL, DETAIL_STATE };
*/
class WebServer : public Controller, public Component, public AsyncWebHandler {
public:
WebServer(web_server_base::WebServerBase *base) : base_(base), entities_iterator_(ListEntitiesIterator(this)) {}
WebServer(web_server_base::WebServerBase *base);
/** Set the URL to the CSS <link> that's sent to each client. Defaults to
* https://esphome.io/_static/webserver-v1.min.css
@@ -220,6 +224,7 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
bool isRequestHandlerTrivial() override;
protected:
void schedule_(std::function<void()> &&f);
friend ListEntitiesIterator;
web_server_base::WebServerBase *base_;
AsyncEventSource events_{"/events"};
@@ -230,6 +235,10 @@ class WebServer : public Controller, public Component, public AsyncWebHandler {
const char *js_include_{nullptr};
bool include_internal_{false};
bool allow_ota_{true};
#ifdef USE_ESP32
std::deque<std::function<void()>> to_schedule_;
SemaphoreHandle_t to_schedule_lock_;
#endif
};
} // namespace web_server