From 6e92d31f5df8efbdc3f11d86401cdec900370444 Mon Sep 17 00:00:00 2001 From: MichaelDvP Date: Thu, 17 Nov 2022 16:18:12 +0100 Subject: [PATCH] limit weblog buffer on low heap, use deque --- src/web/WebLogService.cpp | 4 ++++ src/web/WebLogService.h | 14 +++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/web/WebLogService.cpp b/src/web/WebLogService.cpp index 357ae03f3..f4d26a28f 100644 --- a/src/web/WebLogService.cpp +++ b/src/web/WebLogService.cpp @@ -110,6 +110,10 @@ WebLogService::QueuedLogMessage::QueuedLogMessage(unsigned long id, std::shared_ } void WebLogService::operator<<(std::shared_ptr message) { + if (ESP.getMaxAllocHeap() < 20480) { + maximum_log_messages(maximum_log_messages_ > 25 ? maximum_log_messages_ - 25 : 10); + // EMSESP::logger().warning("Low memory: WebLog buffer reduced to %d entries", maximum_log_messages_); + } if (log_messages_.size() >= maximum_log_messages_) { log_messages_.pop_front(); } diff --git a/src/web/WebLogService.h b/src/web/WebLogService.h index 55ca039f7..1a8b4bd8c 100644 --- a/src/web/WebLogService.h +++ b/src/web/WebLogService.h @@ -68,13 +68,13 @@ class WebLogService : public uuid::log::Handler { AsyncCallbackJsonWebHandler setValues_; // for POSTs - uint64_t last_transmit_ = 0; // Last transmit time - size_t maximum_log_messages_ = MAX_LOG_MESSAGES; // Maximum number of log messages to buffer before they are output - unsigned long log_message_id_ = 0; // The next identifier to use for queued log messages - unsigned long log_message_id_tail_ = 0; // last event shown on the screen after fetch - std::list log_messages_; // Queued log messages, in the order they were received - time_t time_offset_ = 0; - bool compact_ = true; + uint64_t last_transmit_ = 0; // Last transmit time + size_t maximum_log_messages_ = MAX_LOG_MESSAGES; // Maximum number of log messages to buffer before they are output + unsigned long log_message_id_ = 0; // The next identifier to use for queued log messages + unsigned long log_message_id_tail_ = 0; // last event shown on the screen after fetch + std::deque log_messages_; // Queued log messages, in the order they were received + time_t time_offset_ = 0; + bool compact_ = true; }; } // namespace emsesp