From 9a0c7d7c75526413b6354e58133c429d3da6cd91 Mon Sep 17 00:00:00 2001 From: "Alexander A. Klimov" Date: Fri, 9 Feb 2024 14:44:52 +0100 Subject: [PATCH] ApiListener#ReplayLog(): stop reading files ASAP on send error --- lib/remote/apilistener.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/remote/apilistener.cpp b/lib/remote/apilistener.cpp index 85443e218..7d62c28bb 100644 --- a/lib/remote/apilistener.cpp +++ b/lib/remote/apilistener.cpp @@ -1459,7 +1459,9 @@ void ApiListener::ReplayLog(const JsonRpcConnection::Ptr& client) return; } - for (;;) { + bool stopReplay = false; + + do { std::unique_lock lock(m_LogLock); CloseLogFile(); @@ -1542,6 +1544,7 @@ void ApiListener::ReplayLog(const JsonRpcConnection::Ptr& client) Log(LogDebug, "ApiListener") << "Error while replaying log for endpoint '" << endpoint->GetName() << "': " << DiagnosticInformation(ex); + stopReplay = true; break; } @@ -1563,6 +1566,10 @@ void ApiListener::ReplayLog(const JsonRpcConnection::Ptr& client) } logStream->Close(); + + if (stopReplay) { + break; + } } if (count > 0) { @@ -1575,16 +1582,14 @@ void ApiListener::ReplayLog(const JsonRpcConnection::Ptr& client) } if (last_sync) { - { - ObjectLock olock2(endpoint); - endpoint->SetSyncing(false); - } - OpenLogFile(); break; } - } + } while (!stopReplay); + + ObjectLock olock2 (endpoint); + endpoint->SetSyncing(false); } void ApiListener::StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& perfdata)