Merge pull request #9853 from Icinga/GelfWriter-m_StreamMutex

GelfWriter: protect m_Stream via m_WorkQueue, not ObjectLock(this)
This commit is contained in:
Julian Brost 2023-09-07 11:46:38 +02:00 committed by GitHub
commit bba6a76f4a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 9 additions and 12 deletions

View File

@ -114,18 +114,17 @@ void GelfWriter::Pause()
m_ReconnectTimer->Stop(true); m_ReconnectTimer->Stop(true);
try { m_WorkQueue.Enqueue([this]() {
ReconnectInternal(); try {
} catch (const std::exception&) { ReconnectInternal();
Log(LogInformation, "GelfWriter") } catch (const std::exception&) {
<< "'" << GetName() << "' paused. Unable to connect, not flushing buffers. Data may be lost on reload."; Log(LogInformation, "GelfWriter")
<< "Unable to connect, not flushing buffers. Data may be lost.";
ObjectImpl<GelfWriter>::Pause(); }
return; }, PriorityImmediate);
}
m_WorkQueue.Enqueue([this]() { DisconnectInternal(); }, PriorityLow);
m_WorkQueue.Join(); m_WorkQueue.Join();
DisconnectInternal();
Log(LogInformation, "GelfWriter") Log(LogInformation, "GelfWriter")
<< "'" << GetName() << "' paused."; << "'" << GetName() << "' paused.";
@ -513,8 +512,6 @@ void GelfWriter::SendLogMessage(const Checkable::Ptr& checkable, const String& g
String log = msgbuf.str(); String log = msgbuf.str();
ObjectLock olock(this);
if (!GetConnected()) if (!GetConnected())
return; return;