This fixes a deadlock in the GraphiteWriter feature, which is visible
during the reload process. The reload thread waits for the
GraphiteWriter to finish, but the GraphiteWriter can't finish because
it's stuck in `SendMetric()` waiting for a lock which is hold by the
reload thread.
msgbuf << "\n";
String metric = msgbuf.str();
- ObjectLock olock(this);
+ boost::mutex::scoped_lock lock(m_StreamMutex);
if (!GetConnected())
return;
#include "base/timer.hpp"
#include "base/workqueue.hpp"
#include <fstream>
+#include <boost/thread/mutex.hpp>
namespace icinga
{
private:
Stream::Ptr m_Stream;
+ boost::mutex m_StreamMutex;
WorkQueue m_WorkQueue{10000000, 1};
Timer::Ptr m_ReconnectTimer;