From 0aeb0a4aaf48e740ceb6034f2283bf9214ddb032 Mon Sep 17 00:00:00 2001 From: John Date: Sat, 12 Feb 2022 11:25:15 +0100 Subject: [PATCH] avoid polling if message is up-to-date within interval --- src/ebusd/bushandler.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/ebusd/bushandler.cpp b/src/ebusd/bushandler.cpp index 89d7cd7d..b97b9e58 100644 --- a/src/ebusd/bushandler.cpp +++ b/src/ebusd/bushandler.cpp @@ -482,14 +482,17 @@ result_t BusHandler::handleSymbol() { Message* message = m_messages->getNextPoll(); if (message != nullptr) { m_lastPoll = now; - auto request = new PollRequest(message); - result_t ret = request->prepare(m_ownMasterAddress); - if (ret != RESULT_OK) { - logError(lf_bus, "prepare poll message: %s", getResultCode(ret)); - delete request; - } else { - startRequest = request; - m_nextRequests.push(request); + if (difftime(now, message->getLastUpdateTime()) > m_pollInterval) { + // only poll this message if it was not updated already by other means within the interval + auto request = new PollRequest(message); + result_t ret = request->prepare(m_ownMasterAddress); + if (ret != RESULT_OK) { + logError(lf_bus, "prepare poll message: %s", getResultCode(ret)); + delete request; + } else { + startRequest = request; + m_nextRequests.push(request); + } } } }