Use std::mutex, not boost::mutex

This commit is contained in:
Alexander A. Klimov 2021-02-02 10:16:04 +01:00
parent ef23ae5f3c
commit c3388e9af6
87 changed files with 312 additions and 311 deletions

View File

@ -11,7 +11,7 @@ ConfigType::~ConfigType()
ConfigObject::Ptr ConfigType::GetObject(const String& name) const ConfigObject::Ptr ConfigType::GetObject(const String& name) const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto nt = m_ObjectMap.find(name); auto nt = m_ObjectMap.find(name);
@ -26,7 +26,7 @@ void ConfigType::RegisterObject(const ConfigObject::Ptr& object)
String name = object->GetName(); String name = object->GetName();
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto it = m_ObjectMap.find(name); auto it = m_ObjectMap.find(name);
@ -51,7 +51,7 @@ void ConfigType::UnregisterObject(const ConfigObject::Ptr& object)
String name = object->GetName(); String name = object->GetName();
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_ObjectMap.erase(name); m_ObjectMap.erase(name);
m_ObjectVector.erase(std::remove(m_ObjectVector.begin(), m_ObjectVector.end(), object), m_ObjectVector.end()); m_ObjectVector.erase(std::remove(m_ObjectVector.begin(), m_ObjectVector.end(), object), m_ObjectVector.end());
@ -60,7 +60,7 @@ void ConfigType::UnregisterObject(const ConfigObject::Ptr& object)
std::vector<ConfigObject::Ptr> ConfigType::GetObjects() const std::vector<ConfigObject::Ptr> ConfigType::GetObjects() const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_ObjectVector; return m_ObjectVector;
} }
@ -71,6 +71,6 @@ std::vector<ConfigObject::Ptr> ConfigType::GetObjectsHelper(Type *type)
int ConfigType::GetObjectCount() const int ConfigType::GetObjectCount() const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_ObjectVector.size(); return m_ObjectVector.size();
} }

View File

@ -7,7 +7,7 @@
#include "base/object.hpp" #include "base/object.hpp"
#include "base/type.hpp" #include "base/type.hpp"
#include "base/dictionary.hpp" #include "base/dictionary.hpp"
#include <boost/thread/mutex.hpp> #include <mutex>
namespace icinga namespace icinga
{ {
@ -51,7 +51,7 @@ private:
typedef std::map<String, intrusive_ptr<ConfigObject> > ObjectMap; typedef std::map<String, intrusive_ptr<ConfigObject> > ObjectMap;
typedef std::vector<intrusive_ptr<ConfigObject> > ObjectVector; typedef std::vector<intrusive_ptr<ConfigObject> > ObjectVector;
mutable boost::mutex m_Mutex; mutable std::mutex m_Mutex;
ObjectMap m_ObjectMap; ObjectMap m_ObjectMap;
ObjectVector m_ObjectVector; ObjectVector m_ObjectVector;

View File

@ -130,10 +130,10 @@ void ConfigWriter::EmitIndent(std::ostream& fp, int indentLevel)
void ConfigWriter::EmitIdentifier(std::ostream& fp, const String& identifier, bool inAssignment) void ConfigWriter::EmitIdentifier(std::ostream& fp, const String& identifier, bool inAssignment)
{ {
static std::set<String> keywords; static std::set<String> keywords;
static boost::mutex mutex; static std::mutex mutex;
{ {
boost::mutex::scoped_lock lock(mutex); std::unique_lock<std::mutex> lock(mutex);
if (keywords.empty()) { if (keywords.empty()) {
const std::vector<String>& vkeywords = GetKeywords(); const std::vector<String>& vkeywords = GetKeywords();
std::copy(vkeywords.begin(), vkeywords.end(), std::inserter(keywords, keywords.begin())); std::copy(vkeywords.begin(), vkeywords.end(), std::inserter(keywords, keywords.begin()));
@ -203,8 +203,8 @@ String ConfigWriter::EscapeIcingaString(const String& str)
const std::vector<String>& ConfigWriter::GetKeywords() const std::vector<String>& ConfigWriter::GetKeywords()
{ {
static std::vector<String> keywords; static std::vector<String> keywords;
static boost::mutex mutex; static std::mutex mutex;
boost::mutex::scoped_lock lock(mutex); std::unique_lock<std::mutex> lock(mutex);
if (keywords.empty()) { if (keywords.empty()) {
keywords.emplace_back("object"); keywords.emplace_back("object");

View File

@ -4,18 +4,18 @@
using namespace icinga; using namespace icinga;
boost::mutex DependencyGraph::m_Mutex; std::mutex DependencyGraph::m_Mutex;
std::map<Object *, std::map<Object *, int> > DependencyGraph::m_Dependencies; std::map<Object *, std::map<Object *, int> > DependencyGraph::m_Dependencies;
void DependencyGraph::AddDependency(Object *parent, Object *child) void DependencyGraph::AddDependency(Object *parent, Object *child)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_Dependencies[child][parent]++; m_Dependencies[child][parent]++;
} }
void DependencyGraph::RemoveDependency(Object *parent, Object *child) void DependencyGraph::RemoveDependency(Object *parent, Object *child)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto& refs = m_Dependencies[child]; auto& refs = m_Dependencies[child];
auto it = refs.find(parent); auto it = refs.find(parent);
@ -36,7 +36,7 @@ std::vector<Object::Ptr> DependencyGraph::GetParents(const Object::Ptr& child)
{ {
std::vector<Object::Ptr> objects; std::vector<Object::Ptr> objects;
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto it = m_Dependencies.find(child.get()); auto it = m_Dependencies.find(child.get());
if (it != m_Dependencies.end()) { if (it != m_Dependencies.end()) {

View File

@ -5,8 +5,8 @@
#include "base/i2-base.hpp" #include "base/i2-base.hpp"
#include "base/object.hpp" #include "base/object.hpp"
#include <boost/thread/mutex.hpp>
#include <map> #include <map>
#include <mutex>
namespace icinga { namespace icinga {
@ -25,7 +25,7 @@ public:
private: private:
DependencyGraph(); DependencyGraph();
static boost::mutex m_Mutex; static std::mutex m_Mutex;
static std::map<Object *, std::map<Object *, int> > m_Dependencies; static std::map<Object *, std::map<Object *, int> > m_Dependencies;
}; };

View File

@ -27,7 +27,7 @@ template Log& Log::operator<<(const double&);
REGISTER_TYPE(Logger); REGISTER_TYPE(Logger);
std::set<Logger::Ptr> Logger::m_Loggers; std::set<Logger::Ptr> Logger::m_Loggers;
boost::mutex Logger::m_Mutex; std::mutex Logger::m_Mutex;
bool Logger::m_ConsoleLogEnabled = true; bool Logger::m_ConsoleLogEnabled = true;
bool Logger::m_TimestampEnabled = true; bool Logger::m_TimestampEnabled = true;
LogSeverity Logger::m_ConsoleLogSeverity = LogInformation; LogSeverity Logger::m_ConsoleLogSeverity = LogInformation;
@ -47,14 +47,14 @@ void Logger::Start(bool runtimeCreated)
{ {
ObjectImpl<Logger>::Start(runtimeCreated); ObjectImpl<Logger>::Start(runtimeCreated);
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_Loggers.insert(this); m_Loggers.insert(this);
} }
void Logger::Stop(bool runtimeRemoved) void Logger::Stop(bool runtimeRemoved)
{ {
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_Loggers.erase(this); m_Loggers.erase(this);
} }
@ -63,7 +63,7 @@ void Logger::Stop(bool runtimeRemoved)
std::set<Logger::Ptr> Logger::GetLoggers() std::set<Logger::Ptr> Logger::GetLoggers()
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_Loggers; return m_Loggers;
} }

View File

@ -81,7 +81,7 @@ protected:
void Stop(bool runtimeRemoved) override; void Stop(bool runtimeRemoved) override;
private: private:
static boost::mutex m_Mutex; static std::mutex m_Mutex;
static std::set<Logger::Ptr> m_Loggers; static std::set<Logger::Ptr> m_Loggers;
static bool m_ConsoleLogEnabled; static bool m_ConsoleLogEnabled;
static bool m_TimestampEnabled; static bool m_TimestampEnabled;

View File

@ -17,7 +17,7 @@ using namespace icinga;
DEFINE_TYPE_INSTANCE(Object); DEFINE_TYPE_INSTANCE(Object);
#ifdef I2_LEAK_DEBUG #ifdef I2_LEAK_DEBUG
static boost::mutex l_ObjectCountLock; static std::mutex l_ObjectCountLock;
static std::map<String, int> l_ObjectCounts; static std::map<String, int> l_ObjectCounts;
static Timer::Ptr l_ObjectCountTimer; static Timer::Ptr l_ObjectCountTimer;
#endif /* I2_LEAK_DEBUG */ #endif /* I2_LEAK_DEBUG */
@ -203,21 +203,21 @@ Value icinga::GetPrototypeField(const Value& context, const String& field, bool
#ifdef I2_LEAK_DEBUG #ifdef I2_LEAK_DEBUG
void icinga::TypeAddObject(Object *object) void icinga::TypeAddObject(Object *object)
{ {
boost::mutex::scoped_lock lock(l_ObjectCountLock); std::unique_lock<std::mutex> lock(l_ObjectCountLock);
String typeName = Utility::GetTypeName(typeid(*object)); String typeName = Utility::GetTypeName(typeid(*object));
l_ObjectCounts[typeName]++; l_ObjectCounts[typeName]++;
} }
void icinga::TypeRemoveObject(Object *object) void icinga::TypeRemoveObject(Object *object)
{ {
boost::mutex::scoped_lock lock(l_ObjectCountLock); std::unique_lock<std::mutex> lock(l_ObjectCountLock);
String typeName = Utility::GetTypeName(typeid(*object)); String typeName = Utility::GetTypeName(typeid(*object));
l_ObjectCounts[typeName]--; l_ObjectCounts[typeName]--;
} }
static void TypeInfoTimerHandler() static void TypeInfoTimerHandler()
{ {
boost::mutex::scoped_lock lock(l_ObjectCountLock); std::unique_lock<std::mutex> lock(l_ObjectCountLock);
typedef std::map<String, int>::value_type kv_pair; typedef std::map<String, int>::value_type kv_pair;
for (kv_pair& kv : l_ObjectCounts) { for (kv_pair& kv : l_ObjectCounts) {

View File

@ -33,7 +33,7 @@ using namespace icinga;
#define IOTHREADS 4 #define IOTHREADS 4
static boost::mutex l_ProcessMutex[IOTHREADS]; static std::mutex l_ProcessMutex[IOTHREADS];
static std::map<Process::ProcessHandle, Process::Ptr> l_Processes[IOTHREADS]; static std::map<Process::ProcessHandle, Process::Ptr> l_Processes[IOTHREADS];
#ifdef _WIN32 #ifdef _WIN32
static HANDLE l_Events[IOTHREADS]; static HANDLE l_Events[IOTHREADS];
@ -41,7 +41,7 @@ static HANDLE l_Events[IOTHREADS];
static int l_EventFDs[IOTHREADS][2]; static int l_EventFDs[IOTHREADS][2];
static std::map<Process::ConsoleHandle, Process::ProcessHandle> l_FDs[IOTHREADS]; static std::map<Process::ConsoleHandle, Process::ProcessHandle> l_FDs[IOTHREADS];
static boost::mutex l_ProcessControlMutex; static std::mutex l_ProcessControlMutex;
static int l_ProcessControlFD = -1; static int l_ProcessControlFD = -1;
static pid_t l_ProcessControlPID; static pid_t l_ProcessControlPID;
#endif /* _WIN32 */ #endif /* _WIN32 */
@ -372,7 +372,7 @@ static pid_t ProcessSpawn(const std::vector<String>& arguments, const Dictionary
String jrequest = JsonEncode(request); String jrequest = JsonEncode(request);
size_t length = jrequest.GetLength(); size_t length = jrequest.GetLength();
boost::mutex::scoped_lock lock(l_ProcessControlMutex); std::unique_lock<std::mutex> lock(l_ProcessControlMutex);
struct msghdr msg; struct msghdr msg;
memset(&msg, 0, sizeof(msg)); memset(&msg, 0, sizeof(msg));
@ -431,7 +431,7 @@ static int ProcessKill(pid_t pid, int signum)
String jrequest = JsonEncode(request); String jrequest = JsonEncode(request);
size_t length = jrequest.GetLength(); size_t length = jrequest.GetLength();
boost::mutex::scoped_lock lock(l_ProcessControlMutex); std::unique_lock<std::mutex> lock(l_ProcessControlMutex);
do { do {
while (send(l_ProcessControlFD, &length, sizeof(length), 0) < 0) { while (send(l_ProcessControlFD, &length, sizeof(length), 0) < 0) {
@ -462,7 +462,7 @@ static int ProcessWaitPID(pid_t pid, int *status)
String jrequest = JsonEncode(request); String jrequest = JsonEncode(request);
size_t length = jrequest.GetLength(); size_t length = jrequest.GetLength();
boost::mutex::scoped_lock lock(l_ProcessControlMutex); std::unique_lock<std::mutex> lock(l_ProcessControlMutex);
do { do {
while (send(l_ProcessControlFD, &length, sizeof(length), 0) < 0) { while (send(l_ProcessControlFD, &length, sizeof(length), 0) < 0) {
@ -606,7 +606,7 @@ void Process::IOThreadProc(int tid)
now = Utility::GetTime(); now = Utility::GetTime();
{ {
boost::mutex::scoped_lock lock(l_ProcessMutex[tid]); std::unique_lock<std::mutex> lock(l_ProcessMutex[tid]);
count = 1 + l_Processes[tid].size(); count = 1 + l_Processes[tid].size();
#ifdef _WIN32 #ifdef _WIN32
@ -675,7 +675,7 @@ void Process::IOThreadProc(int tid)
now = Utility::GetTime(); now = Utility::GetTime();
{ {
boost::mutex::scoped_lock lock(l_ProcessMutex[tid]); std::unique_lock<std::mutex> lock(l_ProcessMutex[tid]);
#ifdef _WIN32 #ifdef _WIN32
if (rc == WAIT_OBJECT_0) if (rc == WAIT_OBJECT_0)
@ -990,7 +990,7 @@ void Process::Run(const std::function<void(const ProcessResult&)>& callback)
int tid = GetTID(); int tid = GetTID();
{ {
boost::mutex::scoped_lock lock(l_ProcessMutex[tid]); std::unique_lock<std::mutex> lock(l_ProcessMutex[tid]);
l_Processes[tid][m_Process] = this; l_Processes[tid][m_Process] = this;
#ifndef _WIN32 #ifndef _WIN32
l_FDs[tid][m_FD] = m_Process; l_FDs[tid][m_FD] = m_Process;

View File

@ -5,9 +5,9 @@
#include "base/i2-base.hpp" #include "base/i2-base.hpp"
#include "base/string.hpp" #include "base/string.hpp"
#include <boost/thread/mutex.hpp>
#include <boost/signals2.hpp> #include <boost/signals2.hpp>
#include <map> #include <map>
#include <mutex>
namespace icinga namespace icinga
{ {
@ -25,7 +25,7 @@ public:
void RegisterIfNew(const String& name, const T& item) void RegisterIfNew(const String& name, const T& item)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
if (m_Items.find(name) != m_Items.end()) if (m_Items.find(name) != m_Items.end())
return; return;
@ -35,7 +35,7 @@ public:
void Register(const String& name, const T& item) void Register(const String& name, const T& item)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
RegisterInternal(name, item, lock); RegisterInternal(name, item, lock);
} }
@ -45,7 +45,7 @@ public:
size_t erased; size_t erased;
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
erased = m_Items.erase(name); erased = m_Items.erase(name);
} }
@ -58,7 +58,7 @@ public:
typename Registry<U, T>::ItemMap items; typename Registry<U, T>::ItemMap items;
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
items = m_Items; items = m_Items;
} }
@ -67,14 +67,14 @@ public:
} }
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_Items.clear(); m_Items.clear();
} }
} }
T GetItem(const String& name) const T GetItem(const String& name) const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto it = m_Items.find(name); auto it = m_Items.find(name);
@ -86,7 +86,7 @@ public:
ItemMap GetItems() const ItemMap GetItems() const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_Items; /* Makes a copy of the map. */ return m_Items; /* Makes a copy of the map. */
} }
@ -95,10 +95,10 @@ public:
boost::signals2::signal<void (const String&)> OnUnregistered; boost::signals2::signal<void (const String&)> OnUnregistered;
private: private:
mutable boost::mutex m_Mutex; mutable std::mutex m_Mutex;
typename Registry<U, T>::ItemMap m_Items; typename Registry<U, T>::ItemMap m_Items;
void RegisterInternal(const String& name, const T& item, boost::mutex::scoped_lock& lock) void RegisterInternal(const String& name, const T& item, std::unique_lock<std::mutex>& lock)
{ {
bool old_item = false; bool old_item = false;

View File

@ -13,13 +13,13 @@ RingBuffer::RingBuffer(RingBuffer::SizeType slots)
RingBuffer::SizeType RingBuffer::GetLength() const RingBuffer::SizeType RingBuffer::GetLength() const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_Slots.size(); return m_Slots.size();
} }
void RingBuffer::InsertValue(RingBuffer::SizeType tv, int num) void RingBuffer::InsertValue(RingBuffer::SizeType tv, int num)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
InsertValueUnlocked(tv, num); InsertValueUnlocked(tv, num);
} }
@ -55,7 +55,7 @@ void RingBuffer::InsertValueUnlocked(RingBuffer::SizeType tv, int num)
int RingBuffer::UpdateAndGetValues(RingBuffer::SizeType tv, RingBuffer::SizeType span) int RingBuffer::UpdateAndGetValues(RingBuffer::SizeType tv, RingBuffer::SizeType span)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return UpdateAndGetValuesUnlocked(tv, span); return UpdateAndGetValuesUnlocked(tv, span);
} }
@ -84,7 +84,7 @@ int RingBuffer::UpdateAndGetValuesUnlocked(RingBuffer::SizeType tv, RingBuffer::
double RingBuffer::CalculateRate(RingBuffer::SizeType tv, RingBuffer::SizeType span) double RingBuffer::CalculateRate(RingBuffer::SizeType tv, RingBuffer::SizeType span)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
int sum = UpdateAndGetValuesUnlocked(tv, span); int sum = UpdateAndGetValuesUnlocked(tv, span);
return sum / static_cast<double>(std::min(span, m_InsertedValues)); return sum / static_cast<double>(std::min(span, m_InsertedValues));

View File

@ -5,8 +5,8 @@
#include "base/i2-base.hpp" #include "base/i2-base.hpp"
#include "base/object.hpp" #include "base/object.hpp"
#include <boost/thread/mutex.hpp>
#include <vector> #include <vector>
#include <mutex>
namespace icinga namespace icinga
{ {
@ -31,7 +31,7 @@ public:
double CalculateRate(SizeType tv, SizeType span); double CalculateRate(SizeType tv, SizeType span);
private: private:
mutable boost::mutex m_Mutex; mutable std::mutex m_Mutex;
std::vector<int> m_Slots; std::vector<int> m_Slots;
SizeType m_TimeValue; SizeType m_TimeValue;
SizeType m_InsertedValues; SizeType m_InsertedValues;

View File

@ -4,7 +4,6 @@
#define SINGLETON_H #define SINGLETON_H
#include "base/i2-base.hpp" #include "base/i2-base.hpp"
#include <boost/thread/mutex.hpp>
namespace icinga namespace icinga
{ {

View File

@ -145,7 +145,7 @@ std::pair<String, String> Socket::GetDetailsFromSockaddr(sockaddr *address, sock
*/ */
std::pair<String, String> Socket::GetClientAddressDetails() std::pair<String, String> Socket::GetClientAddressDetails()
{ {
boost::mutex::scoped_lock lock(m_SocketMutex); std::unique_lock<std::mutex> lock(m_SocketMutex);
sockaddr_storage sin; sockaddr_storage sin;
socklen_t len = sizeof(sin); socklen_t len = sizeof(sin);
@ -195,7 +195,7 @@ String Socket::GetClientAddress()
*/ */
std::pair<String, String> Socket::GetPeerAddressDetails() std::pair<String, String> Socket::GetPeerAddressDetails()
{ {
boost::mutex::scoped_lock lock(m_SocketMutex); std::unique_lock<std::mutex> lock(m_SocketMutex);
sockaddr_storage sin; sockaddr_storage sin;
socklen_t len = sizeof(sin); socklen_t len = sizeof(sin);

View File

@ -5,7 +5,7 @@
#include "base/i2-base.hpp" #include "base/i2-base.hpp"
#include "base/object.hpp" #include "base/object.hpp"
#include <boost/thread/mutex.hpp> #include <mutex>
namespace icinga namespace icinga
{ {
@ -50,7 +50,7 @@ protected:
int GetError() const; int GetError() const;
mutable boost::mutex m_SocketMutex; mutable std::mutex m_SocketMutex;
private: private:
SOCKET m_FD{INVALID_SOCKET}; /**< The socket descriptor. */ SOCKET m_FD{INVALID_SOCKET}; /**< The socket descriptor. */

View File

@ -2,6 +2,7 @@
#include "base/stream.hpp" #include "base/stream.hpp"
#include <boost/algorithm/string/trim.hpp> #include <boost/algorithm/string/trim.hpp>
#include <chrono>
using namespace icinga; using namespace icinga;
@ -38,7 +39,7 @@ void Stream::SignalDataAvailable()
OnDataAvailable(this); OnDataAvailable(this);
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_CV.notify_all(); m_CV.notify_all();
} }
} }
@ -48,7 +49,7 @@ bool Stream::WaitForData()
if (!SupportsWaiting()) if (!SupportsWaiting())
BOOST_THROW_EXCEPTION(std::runtime_error("Stream does not support waiting.")); BOOST_THROW_EXCEPTION(std::runtime_error("Stream does not support waiting."));
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
while (!IsDataAvailable() && !IsEof()) while (!IsDataAvailable() && !IsEof())
m_CV.wait(lock); m_CV.wait(lock);
@ -58,20 +59,17 @@ bool Stream::WaitForData()
bool Stream::WaitForData(int timeout) bool Stream::WaitForData(int timeout)
{ {
namespace ch = std::chrono;
if (!SupportsWaiting()) if (!SupportsWaiting())
BOOST_THROW_EXCEPTION(std::runtime_error("Stream does not support waiting.")); BOOST_THROW_EXCEPTION(std::runtime_error("Stream does not support waiting."));
if (timeout < 0) if (timeout < 0)
BOOST_THROW_EXCEPTION(std::runtime_error("Timeout can't be negative")); BOOST_THROW_EXCEPTION(std::runtime_error("Timeout can't be negative"));
boost::system_time const point_of_timeout = boost::get_system_time() + boost::posix_time::seconds(timeout); std::unique_lock<std::mutex> lock(m_Mutex);
boost::mutex::scoped_lock lock(m_Mutex); return m_CV.wait_for(lock, ch::duration<int>(timeout), [this]() { return IsDataAvailable() || IsEof(); });
while (!IsDataAvailable() && !IsEof() && point_of_timeout > boost::get_system_time())
m_CV.timed_wait(lock, point_of_timeout);
return IsDataAvailable() || IsEof();
} }
static void StreamDummyCallback() static void StreamDummyCallback()

View File

@ -6,8 +6,8 @@
#include "base/i2-base.hpp" #include "base/i2-base.hpp"
#include "base/object.hpp" #include "base/object.hpp"
#include <boost/signals2.hpp> #include <boost/signals2.hpp>
#include <boost/thread/mutex.hpp> #include <condition_variable>
#include <boost/thread/condition_variable.hpp> #include <mutex>
namespace icinga namespace icinga
{ {
@ -124,8 +124,8 @@ protected:
private: private:
boost::signals2::signal<void(const Stream::Ptr&)> OnDataAvailable; boost::signals2::signal<void(const Stream::Ptr&)> OnDataAvailable;
boost::mutex m_Mutex; std::mutex m_Mutex;
boost::condition_variable m_CV; std::condition_variable m_CV;
}; };
} }

View File

@ -11,7 +11,7 @@ using namespace icinga;
REGISTER_TYPE(StreamLogger); REGISTER_TYPE(StreamLogger);
boost::mutex StreamLogger::m_Mutex; std::mutex StreamLogger::m_Mutex;
void StreamLogger::Stop(bool runtimeRemoved) void StreamLogger::Stop(bool runtimeRemoved)
{ {
@ -75,7 +75,7 @@ void StreamLogger::ProcessLogEntry(std::ostream& stream, const LogEntry& entry)
{ {
String timestamp = Utility::FormatDateTime("%Y-%m-%d %H:%M:%S %z", entry.Timestamp); String timestamp = Utility::FormatDateTime("%Y-%m-%d %H:%M:%S %z", entry.Timestamp);
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
if (Logger::IsTimestampEnabled()) if (Logger::IsTimestampEnabled())
stream << "[" << timestamp << "] "; stream << "[" << timestamp << "] ";

View File

@ -33,7 +33,7 @@ protected:
void Flush() final; void Flush() final;
private: private:
static boost::mutex m_Mutex; static std::mutex m_Mutex;
std::ostream *m_Stream{nullptr}; std::ostream *m_Stream{nullptr};
bool m_OwnsStream{false}; bool m_OwnsStream{false};

View File

@ -5,11 +5,12 @@
#include "base/debug.hpp" #include "base/debug.hpp"
#include "base/logger.hpp" #include "base/logger.hpp"
#include "base/utility.hpp" #include "base/utility.hpp"
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/multi_index_container.hpp> #include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp> #include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/key_extractors.hpp> #include <boost/multi_index/key_extractors.hpp>
#include <chrono>
#include <condition_variable>
#include <mutex>
#include <thread> #include <thread>
using namespace icinga; using namespace icinga;
@ -51,8 +52,8 @@ typedef boost::multi_index_container<
> >
> TimerSet; > TimerSet;
static boost::mutex l_TimerMutex; static std::mutex l_TimerMutex;
static boost::condition_variable l_TimerCV; static std::condition_variable l_TimerCV;
static std::thread l_TimerThread; static std::thread l_TimerThread;
static bool l_StopTimerThread; static bool l_StopTimerThread;
static TimerSet l_Timers; static TimerSet l_Timers;
@ -70,7 +71,7 @@ Timer::~Timer()
void Timer::Initialize() void Timer::Initialize()
{ {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
if (l_AliveTimers > 0) { if (l_AliveTimers > 0) {
InitializeThread(); InitializeThread();
@ -79,7 +80,7 @@ void Timer::Initialize()
void Timer::Uninitialize() void Timer::Uninitialize()
{ {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
if (l_AliveTimers > 0) { if (l_AliveTimers > 0) {
UninitializeThread(); UninitializeThread();
@ -130,7 +131,7 @@ void Timer::Call()
*/ */
void Timer::SetInterval(double interval) void Timer::SetInterval(double interval)
{ {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
m_Interval = interval; m_Interval = interval;
} }
@ -141,7 +142,7 @@ void Timer::SetInterval(double interval)
*/ */
double Timer::GetInterval() const double Timer::GetInterval() const
{ {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
return m_Interval; return m_Interval;
} }
@ -151,7 +152,7 @@ double Timer::GetInterval() const
void Timer::Start() void Timer::Start()
{ {
{ {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
m_Started = true; m_Started = true;
if (++l_AliveTimers == 1) { if (++l_AliveTimers == 1) {
@ -170,7 +171,7 @@ void Timer::Stop(bool wait)
if (l_StopTimerThread) if (l_StopTimerThread)
return; return;
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
if (m_Started && --l_AliveTimers == 0) { if (m_Started && --l_AliveTimers == 0) {
UninitializeThread(); UninitializeThread();
@ -200,7 +201,7 @@ void Timer::Reschedule(double next)
*/ */
void Timer::InternalReschedule(bool completed, double next) void Timer::InternalReschedule(bool completed, double next)
{ {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
if (completed) if (completed)
m_Running = false; m_Running = false;
@ -232,7 +233,7 @@ void Timer::InternalReschedule(bool completed, double next)
*/ */
double Timer::GetNext() const double Timer::GetNext() const
{ {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
return m_Next; return m_Next;
} }
@ -244,7 +245,7 @@ double Timer::GetNext() const
*/ */
void Timer::AdjustTimers(double adjustment) void Timer::AdjustTimers(double adjustment)
{ {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
double now = Utility::GetTime(); double now = Utility::GetTime();
@ -275,12 +276,14 @@ void Timer::AdjustTimers(double adjustment)
*/ */
void Timer::TimerThreadProc() void Timer::TimerThreadProc()
{ {
namespace ch = std::chrono;
Log(LogDebug, "Timer", "TimerThreadProc started."); Log(LogDebug, "Timer", "TimerThreadProc started.");
Utility::SetThreadName("Timer Thread"); Utility::SetThreadName("Timer Thread");
for (;;) { for (;;) {
boost::mutex::scoped_lock lock(l_TimerMutex); std::unique_lock<std::mutex> lock(l_TimerMutex);
typedef boost::multi_index::nth_index<TimerSet, 1>::type NextTimerView; typedef boost::multi_index::nth_index<TimerSet, 1>::type NextTimerView;
NextTimerView& idx = boost::get<1>(l_Timers); NextTimerView& idx = boost::get<1>(l_Timers);
@ -295,11 +298,11 @@ void Timer::TimerThreadProc()
auto it = idx.begin(); auto it = idx.begin();
Timer *timer = *it; Timer *timer = *it;
double wait = timer->m_Next - Utility::GetTime(); ch::time_point<ch::system_clock, ch::duration<double>> next (ch::duration<double>(timer->m_Next));
if (wait > 0.01) { if (next - ch::system_clock::now() > ch::duration<double>(0.01)) {
/* Wait for the next timer. */ /* Wait for the next timer. */
l_TimerCV.timed_wait(lock, boost::posix_time::milliseconds(long(wait * 1000))); l_TimerCV.wait_until(lock, next);
continue; continue;
} }

View File

@ -17,8 +17,8 @@ namespace icinga
{ {
static bool l_SSLInitialized = false; static bool l_SSLInitialized = false;
static boost::mutex *l_Mutexes; static std::mutex *l_Mutexes;
static boost::mutex l_RandomMutex; static std::mutex l_RandomMutex;
String GetOpenSSLVersion() String GetOpenSSLVersion()
{ {
@ -62,7 +62,7 @@ void InitializeOpenSSL()
SSL_COMP_get_compression_methods(); SSL_COMP_get_compression_methods();
#ifdef CRYPTO_LOCK #ifdef CRYPTO_LOCK
l_Mutexes = new boost::mutex[CRYPTO_num_locks()]; l_Mutexes = new std::mutex[CRYPTO_num_locks()];
CRYPTO_set_locking_callback(&OpenSSLLockingCallback); CRYPTO_set_locking_callback(&OpenSSLLockingCallback);
CRYPTO_set_id_callback(&OpenSSLIDCallback); CRYPTO_set_id_callback(&OpenSSLIDCallback);
#endif /* CRYPTO_LOCK */ #endif /* CRYPTO_LOCK */
@ -816,7 +816,7 @@ String RandomString(int length)
/* Ensure that password generation is atomic. RAND_bytes is not thread-safe /* Ensure that password generation is atomic. RAND_bytes is not thread-safe
* in OpenSSL < 1.1.0. * in OpenSSL < 1.1.0.
*/ */
boost::mutex::scoped_lock lock(l_RandomMutex); std::unique_lock<std::mutex> lock(l_RandomMutex);
if (!RAND_bytes(bytes, length)) { if (!RAND_bytes(bytes, length)) {
delete [] bytes; delete [] bytes;

View File

@ -44,16 +44,16 @@ String WorkQueue::GetName() const
return m_Name; return m_Name;
} }
boost::mutex::scoped_lock WorkQueue::AcquireLock() std::unique_lock<std::mutex> WorkQueue::AcquireLock()
{ {
return boost::mutex::scoped_lock(m_Mutex); return std::unique_lock<std::mutex>(m_Mutex);
} }
/** /**
* Enqueues a task. Tasks are guaranteed to be executed in the order * Enqueues a task. Tasks are guaranteed to be executed in the order
* they were enqueued in except if there is more than one worker thread. * they were enqueued in except if there is more than one worker thread.
*/ */
void WorkQueue::EnqueueUnlocked(boost::mutex::scoped_lock& lock, std::function<void ()>&& function, WorkQueuePriority priority) void WorkQueue::EnqueueUnlocked(std::unique_lock<std::mutex>& lock, std::function<void ()>&& function, WorkQueuePriority priority)
{ {
if (!m_Spawned) { if (!m_Spawned) {
Log(LogNotice, "WorkQueue") Log(LogNotice, "WorkQueue")
@ -107,7 +107,7 @@ void WorkQueue::Enqueue(std::function<void ()>&& function, WorkQueuePriority pri
*/ */
void WorkQueue::Join(bool stop) void WorkQueue::Join(bool stop)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
while (m_Processing || !m_Tasks.empty()) while (m_Processing || !m_Tasks.empty())
m_CVStarved.wait(lock); m_CVStarved.wait(lock);
@ -153,7 +153,7 @@ void WorkQueue::SetExceptionCallback(const ExceptionCallback& callback)
*/ */
bool WorkQueue::HasExceptions() const bool WorkQueue::HasExceptions() const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return !m_Exceptions.empty(); return !m_Exceptions.empty();
} }
@ -164,7 +164,7 @@ bool WorkQueue::HasExceptions() const
*/ */
std::vector<boost::exception_ptr> WorkQueue::GetExceptions() const std::vector<boost::exception_ptr> WorkQueue::GetExceptions() const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_Exceptions; return m_Exceptions;
} }
@ -184,14 +184,14 @@ void WorkQueue::ReportExceptions(const String& facility, bool verbose) const
size_t WorkQueue::GetLength() const size_t WorkQueue::GetLength() const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_Tasks.size(); return m_Tasks.size();
} }
void WorkQueue::StatusTimerHandler() void WorkQueue::StatusTimerHandler()
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
ASSERT(!m_Name.IsEmpty()); ASSERT(!m_Name.IsEmpty());
@ -238,7 +238,7 @@ void WorkQueue::RunTaskFunction(const TaskFunction& func)
boost::exception_ptr eptr = boost::current_exception(); boost::exception_ptr eptr = boost::current_exception();
{ {
boost::mutex::scoped_lock mutex(m_Mutex); std::unique_lock<std::mutex> mutex(m_Mutex);
if (!m_ExceptionCallback) if (!m_ExceptionCallback)
m_Exceptions.push_back(eptr); m_Exceptions.push_back(eptr);
@ -257,7 +257,7 @@ void WorkQueue::WorkerThreadProc()
l_ThreadWorkQueue.reset(new WorkQueue *(this)); l_ThreadWorkQueue.reset(new WorkQueue *(this));
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
for (;;) { for (;;) {
while (m_Tasks.empty() && !m_Stopped) while (m_Tasks.empty() && !m_Stopped)

View File

@ -8,9 +8,9 @@
#include "base/ringbuffer.hpp" #include "base/ringbuffer.hpp"
#include "base/logger.hpp" #include "base/logger.hpp"
#include <boost/thread/thread.hpp> #include <boost/thread/thread.hpp>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/exception_ptr.hpp> #include <boost/exception_ptr.hpp>
#include <condition_variable>
#include <mutex>
#include <queue> #include <queue>
#include <deque> #include <deque>
#include <atomic> #include <atomic>
@ -59,8 +59,8 @@ public:
void SetName(const String& name); void SetName(const String& name);
String GetName() const; String GetName() const;
boost::mutex::scoped_lock AcquireLock(); std::unique_lock<std::mutex> AcquireLock();
void EnqueueUnlocked(boost::mutex::scoped_lock& lock, TaskFunction&& function, WorkQueuePriority priority = PriorityNormal); void EnqueueUnlocked(std::unique_lock<std::mutex>& lock, TaskFunction&& function, WorkQueuePriority priority = PriorityNormal);
void Enqueue(TaskFunction&& function, WorkQueuePriority priority = PriorityNormal, void Enqueue(TaskFunction&& function, WorkQueuePriority priority = PriorityNormal,
bool allowInterleaved = false); bool allowInterleaved = false);
void Join(bool stop = false); void Join(bool stop = false);
@ -116,10 +116,10 @@ private:
int m_ThreadCount; int m_ThreadCount;
bool m_Spawned{false}; bool m_Spawned{false};
mutable boost::mutex m_Mutex; mutable std::mutex m_Mutex;
boost::condition_variable m_CVEmpty; std::condition_variable m_CVEmpty;
boost::condition_variable m_CVFull; std::condition_variable m_CVFull;
boost::condition_variable m_CVStarved; std::condition_variable m_CVStarved;
boost::thread_group m_Threads; boost::thread_group m_Threads;
size_t m_MaxItems; size_t m_MaxItems;
bool m_Stopped{false}; bool m_Stopped{false};

View File

@ -14,6 +14,7 @@
#include "base/exception.hpp" #include "base/exception.hpp"
#include "base/convert.hpp" #include "base/convert.hpp"
#include "base/statsfunction.hpp" #include "base/statsfunction.hpp"
#include <chrono>
using namespace icinga; using namespace icinga;
@ -69,7 +70,7 @@ void CheckerComponent::Start(bool runtimeCreated)
void CheckerComponent::Stop(bool runtimeRemoved) void CheckerComponent::Stop(bool runtimeRemoved)
{ {
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_Stopped = true; m_Stopped = true;
m_CV.notify_all(); m_CV.notify_all();
} }
@ -88,7 +89,7 @@ void CheckerComponent::CheckThreadProc()
Utility::SetThreadName("Check Scheduler"); Utility::SetThreadName("Check Scheduler");
IcingaApplication::Ptr icingaApp = IcingaApplication::GetInstance(); IcingaApplication::Ptr icingaApp = IcingaApplication::GetInstance();
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
for (;;) { for (;;) {
typedef boost::multi_index::nth_index<CheckableSet, 1>::type CheckTimeView; typedef boost::multi_index::nth_index<CheckableSet, 1>::type CheckTimeView;
@ -116,7 +117,7 @@ void CheckerComponent::CheckThreadProc()
if (wait > 0) { if (wait > 0) {
/* Wait for the next check. */ /* Wait for the next check. */
m_CV.timed_wait(lock, boost::posix_time::milliseconds(long(wait * 1000))); m_CV.wait_for(lock, std::chrono::duration<double>(wait));
continue; continue;
} }
@ -229,7 +230,7 @@ void CheckerComponent::ExecuteCheckHelper(const Checkable::Ptr& checkable)
Checkable::DecreasePendingChecks(); Checkable::DecreasePendingChecks();
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
/* remove the object from the list of pending objects; if it's not in the /* remove the object from the list of pending objects; if it's not in the
* list this was a manual (i.e. forced) check and we must not re-add the * list this was a manual (i.e. forced) check and we must not re-add the
@ -255,7 +256,7 @@ void CheckerComponent::ResultTimerHandler()
std::ostringstream msgbuf; std::ostringstream msgbuf;
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
msgbuf << "Pending checkables: " << m_PendingCheckables.size() << "; Idle checkables: " << m_IdleCheckables.size() << "; Checks/s: " msgbuf << "Pending checkables: " << m_PendingCheckables.size() << "; Idle checkables: " << m_IdleCheckables.size() << "; Checks/s: "
<< (CIB::GetActiveHostChecksStatistics(60) + CIB::GetActiveServiceChecksStatistics(60)) / 60.0; << (CIB::GetActiveHostChecksStatistics(60) + CIB::GetActiveServiceChecksStatistics(60)) / 60.0;
@ -275,7 +276,7 @@ void CheckerComponent::ObjectHandler(const ConfigObject::Ptr& object)
bool same_zone = (!zone || Zone::GetLocalZone() == zone); bool same_zone = (!zone || Zone::GetLocalZone() == zone);
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
if (object->IsActive() && !object->IsPaused() && same_zone) { if (object->IsActive() && !object->IsPaused() && same_zone) {
if (m_PendingCheckables.find(checkable) != m_PendingCheckables.end()) if (m_PendingCheckables.find(checkable) != m_PendingCheckables.end())
@ -301,7 +302,7 @@ CheckableScheduleInfo CheckerComponent::GetCheckableScheduleInfo(const Checkable
void CheckerComponent::NextCheckChangedHandler(const Checkable::Ptr& checkable) void CheckerComponent::NextCheckChangedHandler(const Checkable::Ptr& checkable)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
/* remove and re-insert the object from the set in order to force an index update */ /* remove and re-insert the object from the set in order to force an index update */
typedef boost::multi_index::nth_index<CheckableSet, 0>::type CheckableView; typedef boost::multi_index::nth_index<CheckableSet, 0>::type CheckableView;
@ -322,14 +323,14 @@ void CheckerComponent::NextCheckChangedHandler(const Checkable::Ptr& checkable)
unsigned long CheckerComponent::GetIdleCheckables() unsigned long CheckerComponent::GetIdleCheckables()
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_IdleCheckables.size(); return m_IdleCheckables.size();
} }
unsigned long CheckerComponent::GetPendingCheckables() unsigned long CheckerComponent::GetPendingCheckables()
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_PendingCheckables.size(); return m_PendingCheckables.size();
} }

View File

@ -8,11 +8,11 @@
#include "base/configobject.hpp" #include "base/configobject.hpp"
#include "base/timer.hpp" #include "base/timer.hpp"
#include "base/utility.hpp" #include "base/utility.hpp"
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
#include <boost/multi_index_container.hpp> #include <boost/multi_index_container.hpp>
#include <boost/multi_index/ordered_index.hpp> #include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/key_extractors.hpp> #include <boost/multi_index/key_extractors.hpp>
#include <condition_variable>
#include <mutex>
#include <thread> #include <thread>
namespace icinga namespace icinga
@ -69,8 +69,8 @@ public:
unsigned long GetPendingCheckables(); unsigned long GetPendingCheckables();
private: private:
boost::mutex m_Mutex; std::mutex m_Mutex;
boost::condition_variable m_CV; std::condition_variable m_CV;
bool m_Stopped{false}; bool m_Stopped{false};
std::thread m_Thread; std::thread m_Thread;

View File

@ -95,9 +95,9 @@ bool CLICommand::IsDeprecated() const
return false; return false;
} }
boost::mutex& CLICommand::GetRegistryMutex() std::mutex& CLICommand::GetRegistryMutex()
{ {
static boost::mutex mtx; static std::mutex mtx;
return mtx; return mtx;
} }
@ -109,7 +109,7 @@ std::map<std::vector<String>, CLICommand::Ptr>& CLICommand::GetRegistry()
CLICommand::Ptr CLICommand::GetByName(const std::vector<String>& name) CLICommand::Ptr CLICommand::GetByName(const std::vector<String>& name)
{ {
boost::mutex::scoped_lock lock(GetRegistryMutex()); std::unique_lock<std::mutex> lock(GetRegistryMutex());
auto it = GetRegistry().find(name); auto it = GetRegistry().find(name);
@ -121,13 +121,13 @@ CLICommand::Ptr CLICommand::GetByName(const std::vector<String>& name)
void CLICommand::Register(const std::vector<String>& name, const CLICommand::Ptr& function) void CLICommand::Register(const std::vector<String>& name, const CLICommand::Ptr& function)
{ {
boost::mutex::scoped_lock lock(GetRegistryMutex()); std::unique_lock<std::mutex> lock(GetRegistryMutex());
GetRegistry()[name] = function; GetRegistry()[name] = function;
} }
void CLICommand::Unregister(const std::vector<String>& name) void CLICommand::Unregister(const std::vector<String>& name)
{ {
boost::mutex::scoped_lock lock(GetRegistryMutex()); std::unique_lock<std::mutex> lock(GetRegistryMutex());
GetRegistry().erase(name); GetRegistry().erase(name);
} }
@ -155,7 +155,7 @@ bool CLICommand::ParseCommand(int argc, char **argv, po::options_description& vi
po::positional_options_description& positionalDesc, po::positional_options_description& positionalDesc,
po::variables_map& vm, String& cmdname, CLICommand::Ptr& command, bool autocomplete) po::variables_map& vm, String& cmdname, CLICommand::Ptr& command, bool autocomplete)
{ {
boost::mutex::scoped_lock lock(GetRegistryMutex()); std::unique_lock<std::mutex> lock(GetRegistryMutex());
typedef std::map<std::vector<String>, CLICommand::Ptr>::value_type CLIKeyValue; typedef std::map<std::vector<String>, CLICommand::Ptr>::value_type CLIKeyValue;
@ -224,7 +224,7 @@ void CLICommand::ShowCommands(int argc, char **argv, po::options_description *vi
ArgumentCompletionCallback globalArgCompletionCallback, ArgumentCompletionCallback globalArgCompletionCallback,
bool autocomplete, int autoindex) bool autocomplete, int autoindex)
{ {
boost::mutex::scoped_lock lock(GetRegistryMutex()); std::unique_lock<std::mutex> lock(GetRegistryMutex());
typedef std::map<std::vector<String>, CLICommand::Ptr>::value_type CLIKeyValue; typedef std::map<std::vector<String>, CLICommand::Ptr>::value_type CLIKeyValue;

View File

@ -64,7 +64,7 @@ public:
bool autocomplete = false, int autoindex = -1); bool autocomplete = false, int autoindex = -1);
private: private:
static boost::mutex& GetRegistryMutex(); static std::mutex& GetRegistryMutex();
static std::map<std::vector<String>, CLICommand::Ptr>& GetRegistry(); static std::map<std::vector<String>, CLICommand::Ptr>& GetRegistry();
}; };

View File

@ -117,8 +117,8 @@ extern "C" void dbg_eval_with_object(Object *object, const char *text)
void ConsoleCommand::BreakpointHandler(ScriptFrame& frame, ScriptError *ex, const DebugInfo& di) void ConsoleCommand::BreakpointHandler(ScriptFrame& frame, ScriptError *ex, const DebugInfo& di)
{ {
static boost::mutex mutex; static std::mutex mutex;
boost::mutex::scoped_lock lock(mutex); std::unique_lock<std::mutex> lock(mutex);
if (!Application::GetScriptDebuggerEnabled()) if (!Application::GetScriptDebuggerEnabled())
return; return;

View File

@ -8,6 +8,7 @@
#include "base/scriptframe.hpp" #include "base/scriptframe.hpp"
#include "base/tlsstream.hpp" #include "base/tlsstream.hpp"
#include "remote/url.hpp" #include "remote/url.hpp"
#include <condition_variable>
namespace icinga namespace icinga
@ -37,8 +38,8 @@ public:
bool syntaxOnly = false); bool syntaxOnly = false);
private: private:
mutable boost::mutex m_Mutex; mutable std::mutex m_Mutex;
mutable boost::condition_variable m_CV; mutable std::condition_variable m_CV;
static Shared<AsioTlsStream>::Ptr Connect(); static Shared<AsioTlsStream>::Ptr Connect();

View File

@ -12,7 +12,7 @@
using namespace icinga; using namespace icinga;
std::vector<String> ConfigCompiler::m_IncludeSearchDirs; std::vector<String> ConfigCompiler::m_IncludeSearchDirs;
boost::mutex ConfigCompiler::m_ZoneDirsMutex; std::mutex ConfigCompiler::m_ZoneDirsMutex;
std::map<String, std::vector<ZoneFragment> > ConfigCompiler::m_ZoneDirs; std::map<String, std::vector<ZoneFragment> > ConfigCompiler::m_ZoneDirs;
/** /**
@ -296,7 +296,7 @@ void ConfigCompiler::AddIncludeSearchDir(const String& dir)
std::vector<ZoneFragment> ConfigCompiler::GetZoneDirs(const String& zone) std::vector<ZoneFragment> ConfigCompiler::GetZoneDirs(const String& zone)
{ {
boost::mutex::scoped_lock lock(m_ZoneDirsMutex); std::unique_lock<std::mutex> lock(m_ZoneDirsMutex);
auto it = m_ZoneDirs.find(zone); auto it = m_ZoneDirs.find(zone);
if (it == m_ZoneDirs.end()) if (it == m_ZoneDirs.end())
return std::vector<ZoneFragment>(); return std::vector<ZoneFragment>();
@ -310,7 +310,7 @@ void ConfigCompiler::RegisterZoneDir(const String& tag, const String& ppath, con
zf.Tag = tag; zf.Tag = tag;
zf.Path = ppath; zf.Path = ppath;
boost::mutex::scoped_lock lock(m_ZoneDirsMutex); std::unique_lock<std::mutex> lock(m_ZoneDirsMutex);
m_ZoneDirs[zoneName].push_back(zf); m_ZoneDirs[zoneName].push_back(zf);
} }

View File

@ -126,7 +126,7 @@ private:
void *m_Scanner; void *m_Scanner;
static std::vector<String> m_IncludeSearchDirs; static std::vector<String> m_IncludeSearchDirs;
static boost::mutex m_ZoneDirsMutex; static std::mutex m_ZoneDirsMutex;
static std::map<String, std::vector<ZoneFragment> > m_ZoneDirs; static std::map<String, std::vector<ZoneFragment> > m_ZoneDirs;
void InitializeScanner(); void InitializeScanner();

View File

@ -41,7 +41,7 @@ void ConfigCompilerContext::WriteObject(const Dictionary::Ptr& object)
String json = JsonEncode(object); String json = JsonEncode(object);
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
NetString::WriteStringToStream(*m_ObjectsFP, json); NetString::WriteStringToStream(*m_ObjectsFP, json);
} }
} }

View File

@ -5,8 +5,8 @@
#include "config/i2-config.hpp" #include "config/i2-config.hpp"
#include "base/dictionary.hpp" #include "base/dictionary.hpp"
#include <boost/thread/mutex.hpp>
#include <fstream> #include <fstream>
#include <mutex>
namespace icinga namespace icinga
{ {
@ -29,7 +29,7 @@ private:
String m_ObjectsTempFile; String m_ObjectsTempFile;
std::fstream *m_ObjectsFP{nullptr}; std::fstream *m_ObjectsFP{nullptr};
mutable boost::mutex m_Mutex; mutable std::mutex m_Mutex;
}; };
} }

View File

@ -28,7 +28,7 @@
using namespace icinga; using namespace icinga;
boost::mutex ConfigItem::m_Mutex; std::mutex ConfigItem::m_Mutex;
ConfigItem::TypeMap ConfigItem::m_Items; ConfigItem::TypeMap ConfigItem::m_Items;
ConfigItem::TypeMap ConfigItem::m_DefaultTemplates; ConfigItem::TypeMap ConfigItem::m_DefaultTemplates;
ConfigItem::ItemList ConfigItem::m_UnnamedItems; ConfigItem::ItemList ConfigItem::m_UnnamedItems;
@ -195,7 +195,7 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
<< "Ignoring config object '" << m_Name << "' of type '" << type->GetName() << "' due to errors: " << DiagnosticInformation(ex); << "Ignoring config object '" << m_Name << "' of type '" << type->GetName() << "' due to errors: " << DiagnosticInformation(ex);
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_IgnoredItems.push_back(m_DebugInfo.Path); m_IgnoredItems.push_back(m_DebugInfo.Path);
} }
@ -247,7 +247,7 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
<< "Ignoring config object '" << m_Name << "' of type '" << type->GetName() << "' due to errors: " << DiagnosticInformation(ex); << "Ignoring config object '" << m_Name << "' of type '" << type->GetName() << "' due to errors: " << DiagnosticInformation(ex);
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_IgnoredItems.push_back(m_DebugInfo.Path); m_IgnoredItems.push_back(m_DebugInfo.Path);
} }
@ -266,7 +266,7 @@ ConfigObject::Ptr ConfigItem::Commit(bool discard)
<< "Ignoring config object '" << m_Name << "' of type '" << m_Type->GetName() << "' due to errors: " << DiagnosticInformation(ex); << "Ignoring config object '" << m_Name << "' of type '" << m_Type->GetName() << "' due to errors: " << DiagnosticInformation(ex);
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_IgnoredItems.push_back(m_DebugInfo.Path); m_IgnoredItems.push_back(m_DebugInfo.Path);
} }
@ -317,7 +317,7 @@ void ConfigItem::Register()
{ {
m_ActivationContext = ActivationContext::GetCurrentContext(); m_ActivationContext = ActivationContext::GetCurrentContext();
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
/* If this is a non-abstract object with a composite name /* If this is a non-abstract object with a composite name
* we register it in m_UnnamedItems instead of m_Items. */ * we register it in m_UnnamedItems instead of m_Items. */
@ -353,7 +353,7 @@ void ConfigItem::Unregister()
m_Object.reset(); m_Object.reset();
} }
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_UnnamedItems.erase(std::remove(m_UnnamedItems.begin(), m_UnnamedItems.end(), this), m_UnnamedItems.end()); m_UnnamedItems.erase(std::remove(m_UnnamedItems.begin(), m_UnnamedItems.end(), this), m_UnnamedItems.end());
m_Items[m_Type].erase(m_Name); m_Items[m_Type].erase(m_Name);
m_DefaultTemplates[m_Type].erase(m_Name); m_DefaultTemplates[m_Type].erase(m_Name);
@ -368,7 +368,7 @@ void ConfigItem::Unregister()
*/ */
ConfigItem::Ptr ConfigItem::GetByTypeAndName(const Type::Ptr& type, const String& name) ConfigItem::Ptr ConfigItem::GetByTypeAndName(const Type::Ptr& type, const String& name)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto it = m_Items.find(type); auto it = m_Items.find(type);
@ -389,7 +389,7 @@ bool ConfigItem::CommitNewItems(const ActivationContext::Ptr& context, WorkQueue
std::vector<ItemPair> items; std::vector<ItemPair> items;
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
for (const TypeMap::value_type& kv : m_Items) { for (const TypeMap::value_type& kv : m_Items) {
for (const ItemMap::value_type& kv2 : kv.second) { for (const ItemMap::value_type& kv2 : kv.second) {
@ -534,7 +534,7 @@ bool ConfigItem::CommitNewItems(const ActivationContext::Ptr& context, WorkQueue
item->Unregister(); item->Unregister();
{ {
boost::mutex::scoped_lock lock(item->m_Mutex); std::unique_lock<std::mutex> lock(item->m_Mutex);
item->m_IgnoredItems.push_back(item->m_DebugInfo.Path); item->m_IgnoredItems.push_back(item->m_DebugInfo.Path);
} }
} }
@ -627,8 +627,8 @@ bool ConfigItem::CommitItems(const ActivationContext::Ptr& context, WorkQueue& u
bool ConfigItem::ActivateItems(const std::vector<ConfigItem::Ptr>& newItems, bool runtimeCreated, bool ConfigItem::ActivateItems(const std::vector<ConfigItem::Ptr>& newItems, bool runtimeCreated,
bool silent, bool withModAttrs, const Value& cookie) bool silent, bool withModAttrs, const Value& cookie)
{ {
static boost::mutex mtx; static std::mutex mtx;
boost::mutex::scoped_lock lock(mtx); std::unique_lock<std::mutex> lock(mtx);
if (withModAttrs) { if (withModAttrs) {
/* restore modified attributes */ /* restore modified attributes */
@ -730,7 +730,7 @@ std::vector<ConfigItem::Ptr> ConfigItem::GetItems(const Type::Ptr& type)
{ {
std::vector<ConfigItem::Ptr> items; std::vector<ConfigItem::Ptr> items;
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto it = m_Items.find(type); auto it = m_Items.find(type);
@ -750,7 +750,7 @@ std::vector<ConfigItem::Ptr> ConfigItem::GetDefaultTemplates(const Type::Ptr& ty
{ {
std::vector<ConfigItem::Ptr> items; std::vector<ConfigItem::Ptr> items;
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto it = m_DefaultTemplates.find(type); auto it = m_DefaultTemplates.find(type);
@ -768,7 +768,7 @@ std::vector<ConfigItem::Ptr> ConfigItem::GetDefaultTemplates(const Type::Ptr& ty
void ConfigItem::RemoveIgnoredItems(const String& allowedConfigPath) void ConfigItem::RemoveIgnoredItems(const String& allowedConfigPath)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
for (const String& path : m_IgnoredItems) { for (const String& path : m_IgnoredItems) {
if (path.Find(allowedConfigPath) == String::NPos) if (path.Find(allowedConfigPath) == String::NPos)

View File

@ -80,7 +80,7 @@ private:
ConfigObject::Ptr m_Object; ConfigObject::Ptr m_Object;
static boost::mutex m_Mutex; static std::mutex m_Mutex;
typedef std::map<String, ConfigItem::Ptr> ItemMap; typedef std::map<String, ConfigItem::Ptr> ItemMap;
typedef std::map<Type::Ptr, ItemMap> TypeMap; typedef std::map<Type::Ptr, ItemMap> TypeMap;

View File

@ -522,13 +522,13 @@ void DbConnection::IncreaseQueryCount()
{ {
double now = Utility::GetTime(); double now = Utility::GetTime();
boost::mutex::scoped_lock lock(m_StatsMutex); std::unique_lock<std::mutex> lock(m_StatsMutex);
m_QueryStats.InsertValue(now, 1); m_QueryStats.InsertValue(now, 1);
} }
int DbConnection::GetQueryCount(RingBuffer::SizeType span) int DbConnection::GetQueryCount(RingBuffer::SizeType span)
{ {
boost::mutex::scoped_lock lock(m_StatsMutex); std::unique_lock<std::mutex> lock(m_StatsMutex);
return m_QueryStats.UpdateAndGetValues(Utility::GetTime(), span); return m_QueryStats.UpdateAndGetValues(Utility::GetTime(), span);
} }

View File

@ -10,7 +10,7 @@
#include "base/timer.hpp" #include "base/timer.hpp"
#include "base/ringbuffer.hpp" #include "base/ringbuffer.hpp"
#include <boost/thread/once.hpp> #include <boost/thread/once.hpp>
#include <boost/thread/mutex.hpp> #include <mutex>
#define IDO_CURRENT_SCHEMA_VERSION "1.14.3" #define IDO_CURRENT_SCHEMA_VERSION "1.14.3"
#define IDO_COMPAT_SCHEMA_VERSION "1.14.3" #define IDO_COMPAT_SCHEMA_VERSION "1.14.3"
@ -118,7 +118,7 @@ private:
static void InsertRuntimeVariable(const String& key, const Value& value); static void InsertRuntimeVariable(const String& key, const Value& value);
mutable boost::mutex m_StatsMutex; mutable std::mutex m_StatsMutex;
RingBuffer m_QueryStats{15 * 60}; RingBuffer m_QueryStats{15 * 60};
bool m_ActiveChangedHandler{false}; bool m_ActiveChangedHandler{false};

View File

@ -347,7 +347,7 @@ void DbObject::OnStatusUpdate()
DbObject::Ptr DbObject::GetOrCreateByObject(const ConfigObject::Ptr& object) DbObject::Ptr DbObject::GetOrCreateByObject(const ConfigObject::Ptr& object)
{ {
boost::mutex::scoped_lock lock(GetStaticMutex()); std::unique_lock<std::mutex> lock(GetStaticMutex());
DbObject::Ptr dbobj = object->GetExtension("DbObject"); DbObject::Ptr dbobj = object->GetExtension("DbObject");
@ -422,8 +422,8 @@ void DbObject::VersionChangedHandler(const ConfigObject::Ptr& object)
} }
} }
boost::mutex& DbObject::GetStaticMutex() std::mutex& DbObject::GetStaticMutex()
{ {
static boost::mutex mutex; static std::mutex mutex;
return mutex; return mutex;
} }

View File

@ -96,7 +96,7 @@ private:
static void VarsChangedHandler(const CustomVarObject::Ptr& object); static void VarsChangedHandler(const CustomVarObject::Ptr& object);
static void VersionChangedHandler(const ConfigObject::Ptr& object); static void VersionChangedHandler(const ConfigObject::Ptr& object);
static boost::mutex& GetStaticMutex(); static std::mutex& GetStaticMutex();
friend class DbType; friend class DbType;
}; };

View File

@ -34,7 +34,7 @@ String DbType::GetIDColumn() const
void DbType::RegisterType(const DbType::Ptr& type) void DbType::RegisterType(const DbType::Ptr& type)
{ {
boost::mutex::scoped_lock lock(GetStaticMutex()); std::unique_lock<std::mutex> lock(GetStaticMutex());
GetTypes()[type->GetName()] = type; GetTypes()[type->GetName()] = type;
} }
@ -47,7 +47,7 @@ DbType::Ptr DbType::GetByName(const String& name)
else else
typeName = name; typeName = name;
boost::mutex::scoped_lock lock(GetStaticMutex()); std::unique_lock<std::mutex> lock(GetStaticMutex());
auto it = GetTypes().find(typeName); auto it = GetTypes().find(typeName);
if (it == GetTypes().end()) if (it == GetTypes().end())
@ -58,7 +58,7 @@ DbType::Ptr DbType::GetByName(const String& name)
DbType::Ptr DbType::GetByID(long tid) DbType::Ptr DbType::GetByID(long tid)
{ {
boost::mutex::scoped_lock lock(GetStaticMutex()); std::unique_lock<std::mutex> lock(GetStaticMutex());
for (const TypeMap::value_type& kv : GetTypes()) { for (const TypeMap::value_type& kv : GetTypes()) {
if (kv.second->GetTypeID() == tid) if (kv.second->GetTypeID() == tid)
@ -105,9 +105,9 @@ DbObject::Ptr DbType::GetOrCreateObjectByName(const String& name1, const String&
return dbobj; return dbobj;
} }
boost::mutex& DbType::GetStaticMutex() std::mutex& DbType::GetStaticMutex()
{ {
static boost::mutex mutex; static std::mutex mutex;
return mutex; return mutex;
} }
@ -125,7 +125,7 @@ std::set<DbType::Ptr> DbType::GetAllTypes()
std::set<DbType::Ptr> result; std::set<DbType::Ptr> result;
{ {
boost::mutex::scoped_lock lock(GetStaticMutex()); std::unique_lock<std::mutex> lock(GetStaticMutex());
for (const auto& kv : GetTypes()) { for (const auto& kv : GetTypes()) {
result.insert(kv.second); result.insert(kv.second);
} }

View File

@ -51,7 +51,7 @@ private:
String m_IDColumn; String m_IDColumn;
ObjectFactory m_ObjectFactory; ObjectFactory m_ObjectFactory;
static boost::mutex& GetStaticMutex(); static std::mutex& GetStaticMutex();
static TypeMap& GetTypes(); static TypeMap& GetTypes();
ObjectMap m_Objects; ObjectMap m_Objects;

View File

@ -25,9 +25,9 @@ boost::signals2::signal<void (const Checkable::Ptr&)> Checkable::OnNextCheckUpda
Atomic<uint_fast64_t> Checkable::CurrentConcurrentChecks (0); Atomic<uint_fast64_t> Checkable::CurrentConcurrentChecks (0);
boost::mutex Checkable::m_StatsMutex; std::mutex Checkable::m_StatsMutex;
int Checkable::m_PendingChecks = 0; int Checkable::m_PendingChecks = 0;
boost::condition_variable Checkable::m_PendingChecksCV; std::condition_variable Checkable::m_PendingChecksCV;
CheckCommand::Ptr Checkable::GetCheckCommand() const CheckCommand::Ptr Checkable::GetCheckCommand() const
{ {
@ -659,26 +659,26 @@ void Checkable::UpdateStatistics(const CheckResult::Ptr& cr, CheckableType type)
void Checkable::IncreasePendingChecks() void Checkable::IncreasePendingChecks()
{ {
boost::mutex::scoped_lock lock(m_StatsMutex); std::unique_lock<std::mutex> lock(m_StatsMutex);
m_PendingChecks++; m_PendingChecks++;
} }
void Checkable::DecreasePendingChecks() void Checkable::DecreasePendingChecks()
{ {
boost::mutex::scoped_lock lock(m_StatsMutex); std::unique_lock<std::mutex> lock(m_StatsMutex);
m_PendingChecks--; m_PendingChecks--;
m_PendingChecksCV.notify_one(); m_PendingChecksCV.notify_one();
} }
int Checkable::GetPendingChecks() int Checkable::GetPendingChecks()
{ {
boost::mutex::scoped_lock lock(m_StatsMutex); std::unique_lock<std::mutex> lock(m_StatsMutex);
return m_PendingChecks; return m_PendingChecks;
} }
void Checkable::AquirePendingCheckSlot(int maxPendingChecks) void Checkable::AquirePendingCheckSlot(int maxPendingChecks)
{ {
boost::mutex::scoped_lock lock(m_StatsMutex); std::unique_lock<std::mutex> lock(m_StatsMutex);
while (m_PendingChecks >= maxPendingChecks) while (m_PendingChecks >= maxPendingChecks)
m_PendingChecksCV.wait(lock); m_PendingChecksCV.wait(lock);

View File

@ -38,18 +38,18 @@ void Checkable::RemoveCommentsByType(int type, const String& removedBy)
std::set<Comment::Ptr> Checkable::GetComments() const std::set<Comment::Ptr> Checkable::GetComments() const
{ {
boost::mutex::scoped_lock lock(m_CommentMutex); std::unique_lock<std::mutex> lock(m_CommentMutex);
return m_Comments; return m_Comments;
} }
void Checkable::RegisterComment(const Comment::Ptr& comment) void Checkable::RegisterComment(const Comment::Ptr& comment)
{ {
boost::mutex::scoped_lock lock(m_CommentMutex); std::unique_lock<std::mutex> lock(m_CommentMutex);
m_Comments.insert(comment); m_Comments.insert(comment);
} }
void Checkable::UnregisterComment(const Comment::Ptr& comment) void Checkable::UnregisterComment(const Comment::Ptr& comment)
{ {
boost::mutex::scoped_lock lock(m_CommentMutex); std::unique_lock<std::mutex> lock(m_CommentMutex);
m_Comments.erase(comment); m_Comments.erase(comment);
} }

View File

@ -8,37 +8,37 @@ using namespace icinga;
void Checkable::AddDependency(const Dependency::Ptr& dep) void Checkable::AddDependency(const Dependency::Ptr& dep)
{ {
boost::mutex::scoped_lock lock(m_DependencyMutex); std::unique_lock<std::mutex> lock(m_DependencyMutex);
m_Dependencies.insert(dep); m_Dependencies.insert(dep);
} }
void Checkable::RemoveDependency(const Dependency::Ptr& dep) void Checkable::RemoveDependency(const Dependency::Ptr& dep)
{ {
boost::mutex::scoped_lock lock(m_DependencyMutex); std::unique_lock<std::mutex> lock(m_DependencyMutex);
m_Dependencies.erase(dep); m_Dependencies.erase(dep);
} }
std::vector<Dependency::Ptr> Checkable::GetDependencies() const std::vector<Dependency::Ptr> Checkable::GetDependencies() const
{ {
boost::mutex::scoped_lock lock(m_DependencyMutex); std::unique_lock<std::mutex> lock(m_DependencyMutex);
return std::vector<Dependency::Ptr>(m_Dependencies.begin(), m_Dependencies.end()); return std::vector<Dependency::Ptr>(m_Dependencies.begin(), m_Dependencies.end());
} }
void Checkable::AddReverseDependency(const Dependency::Ptr& dep) void Checkable::AddReverseDependency(const Dependency::Ptr& dep)
{ {
boost::mutex::scoped_lock lock(m_DependencyMutex); std::unique_lock<std::mutex> lock(m_DependencyMutex);
m_ReverseDependencies.insert(dep); m_ReverseDependencies.insert(dep);
} }
void Checkable::RemoveReverseDependency(const Dependency::Ptr& dep) void Checkable::RemoveReverseDependency(const Dependency::Ptr& dep)
{ {
boost::mutex::scoped_lock lock(m_DependencyMutex); std::unique_lock<std::mutex> lock(m_DependencyMutex);
m_ReverseDependencies.erase(dep); m_ReverseDependencies.erase(dep);
} }
std::vector<Dependency::Ptr> Checkable::GetReverseDependencies() const std::vector<Dependency::Ptr> Checkable::GetReverseDependencies() const
{ {
boost::mutex::scoped_lock lock(m_DependencyMutex); std::unique_lock<std::mutex> lock(m_DependencyMutex);
return std::vector<Dependency::Ptr>(m_ReverseDependencies.begin(), m_ReverseDependencies.end()); return std::vector<Dependency::Ptr>(m_ReverseDependencies.begin(), m_ReverseDependencies.end());
} }

View File

@ -47,18 +47,18 @@ int Checkable::GetDowntimeDepth() const
std::set<Downtime::Ptr> Checkable::GetDowntimes() const std::set<Downtime::Ptr> Checkable::GetDowntimes() const
{ {
boost::mutex::scoped_lock lock(m_DowntimeMutex); std::unique_lock<std::mutex> lock(m_DowntimeMutex);
return m_Downtimes; return m_Downtimes;
} }
void Checkable::RegisterDowntime(const Downtime::Ptr& downtime) void Checkable::RegisterDowntime(const Downtime::Ptr& downtime)
{ {
boost::mutex::scoped_lock lock(m_DowntimeMutex); std::unique_lock<std::mutex> lock(m_DowntimeMutex);
m_Downtimes.insert(downtime); m_Downtimes.insert(downtime);
} }
void Checkable::UnregisterDowntime(const Downtime::Ptr& downtime) void Checkable::UnregisterDowntime(const Downtime::Ptr& downtime)
{ {
boost::mutex::scoped_lock lock(m_DowntimeMutex); std::unique_lock<std::mutex> lock(m_DowntimeMutex);
m_Downtimes.erase(downtime); m_Downtimes.erase(downtime);
} }

View File

@ -113,19 +113,19 @@ void Checkable::SendNotifications(NotificationType type, const CheckResult::Ptr&
std::set<Notification::Ptr> Checkable::GetNotifications() const std::set<Notification::Ptr> Checkable::GetNotifications() const
{ {
boost::mutex::scoped_lock lock(m_NotificationMutex); std::unique_lock<std::mutex> lock(m_NotificationMutex);
return m_Notifications; return m_Notifications;
} }
void Checkable::RegisterNotification(const Notification::Ptr& notification) void Checkable::RegisterNotification(const Notification::Ptr& notification)
{ {
boost::mutex::scoped_lock lock(m_NotificationMutex); std::unique_lock<std::mutex> lock(m_NotificationMutex);
m_Notifications.insert(notification); m_Notifications.insert(notification);
} }
void Checkable::UnregisterNotification(const Notification::Ptr& notification) void Checkable::UnregisterNotification(const Notification::Ptr& notification)
{ {
boost::mutex::scoped_lock lock(m_NotificationMutex); std::unique_lock<std::mutex> lock(m_NotificationMutex);
m_Notifications.erase(notification); m_Notifications.erase(notification);
} }

View File

@ -99,7 +99,7 @@ void Checkable::Start(bool runtimeCreated)
void Checkable::AddGroup(const String& name) void Checkable::AddGroup(const String& name)
{ {
boost::mutex::scoped_lock lock(m_CheckableMutex); std::unique_lock<std::mutex> lock(m_CheckableMutex);
Array::Ptr groups; Array::Ptr groups;
auto *host = dynamic_cast<Host *>(this); auto *host = dynamic_cast<Host *>(this);

View File

@ -14,6 +14,7 @@
#include "icinga/downtime.hpp" #include "icinga/downtime.hpp"
#include "remote/endpoint.hpp" #include "remote/endpoint.hpp"
#include "remote/messageorigin.hpp" #include "remote/messageorigin.hpp"
#include <condition_variable>
#include <cstdint> #include <cstdint>
#include <functional> #include <functional>
@ -189,17 +190,17 @@ protected:
void OnAllConfigLoaded() override; void OnAllConfigLoaded() override;
private: private:
mutable boost::mutex m_CheckableMutex; mutable std::mutex m_CheckableMutex;
bool m_CheckRunning{false}; bool m_CheckRunning{false};
long m_SchedulingOffset; long m_SchedulingOffset;
static boost::mutex m_StatsMutex; static std::mutex m_StatsMutex;
static int m_PendingChecks; static int m_PendingChecks;
static boost::condition_variable m_PendingChecksCV; static std::condition_variable m_PendingChecksCV;
/* Downtimes */ /* Downtimes */
std::set<Downtime::Ptr> m_Downtimes; std::set<Downtime::Ptr> m_Downtimes;
mutable boost::mutex m_DowntimeMutex; mutable std::mutex m_DowntimeMutex;
static void NotifyFixedDowntimeStart(const Downtime::Ptr& downtime); static void NotifyFixedDowntimeStart(const Downtime::Ptr& downtime);
static void NotifyFlexibleDowntimeStart(const Downtime::Ptr& downtime); static void NotifyFlexibleDowntimeStart(const Downtime::Ptr& downtime);
@ -212,14 +213,14 @@ private:
/* Comments */ /* Comments */
std::set<Comment::Ptr> m_Comments; std::set<Comment::Ptr> m_Comments;
mutable boost::mutex m_CommentMutex; mutable std::mutex m_CommentMutex;
/* Notifications */ /* Notifications */
std::set<Notification::Ptr> m_Notifications; std::set<Notification::Ptr> m_Notifications;
mutable boost::mutex m_NotificationMutex; mutable std::mutex m_NotificationMutex;
/* Dependencies */ /* Dependencies */
mutable boost::mutex m_DependencyMutex; mutable std::mutex m_DependencyMutex;
std::set<intrusive_ptr<Dependency> > m_Dependencies; std::set<intrusive_ptr<Dependency> > m_Dependencies;
std::set<intrusive_ptr<Dependency> > m_ReverseDependencies; std::set<intrusive_ptr<Dependency> > m_ReverseDependencies;

View File

@ -79,7 +79,7 @@ public:
private: private:
CIB(); CIB();
static boost::mutex m_Mutex; static std::mutex m_Mutex;
static RingBuffer m_ActiveHostChecksStatistics; static RingBuffer m_ActiveHostChecksStatistics;
static RingBuffer m_PassiveHostChecksStatistics; static RingBuffer m_PassiveHostChecksStatistics;
static RingBuffer m_ActiveServiceChecksStatistics; static RingBuffer m_ActiveServiceChecksStatistics;

View File

@ -12,7 +12,7 @@
using namespace icinga; using namespace icinga;
boost::mutex ClusterEvents::m_Mutex; std::mutex ClusterEvents::m_Mutex;
std::deque<std::function<void ()>> ClusterEvents::m_CheckRequestQueue; std::deque<std::function<void ()>> ClusterEvents::m_CheckRequestQueue;
bool ClusterEvents::m_CheckSchedulerRunning; bool ClusterEvents::m_CheckSchedulerRunning;
int ClusterEvents::m_ChecksExecutedDuringInterval; int ClusterEvents::m_ChecksExecutedDuringInterval;
@ -25,7 +25,7 @@ void ClusterEvents::RemoteCheckThreadProc()
int maxConcurrentChecks = IcingaApplication::GetInstance()->GetMaxConcurrentChecks(); int maxConcurrentChecks = IcingaApplication::GetInstance()->GetMaxConcurrentChecks();
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
for(;;) { for(;;) {
if (m_CheckRequestQueue.empty()) if (m_CheckRequestQueue.empty())
@ -60,7 +60,7 @@ void ClusterEvents::EnqueueCheck(const MessageOrigin::Ptr& origin, const Diction
m_LogTimer->Start(); m_LogTimer->Start();
}); });
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
if (m_CheckRequestQueue.size() >= 25000) { if (m_CheckRequestQueue.size() >= 25000) {
m_ChecksDroppedDuringInterval++; m_ChecksDroppedDuringInterval++;

View File

@ -73,7 +73,7 @@ public:
static void LogRemoteCheckQueueInformation(); static void LogRemoteCheckQueueInformation();
private: private:
static boost::mutex m_Mutex; static std::mutex m_Mutex;
static std::deque<std::function<void ()>> m_CheckRequestQueue; static std::deque<std::function<void ()>> m_CheckRequestQueue;
static bool m_CheckSchedulerRunning; static bool m_CheckSchedulerRunning;
static int m_ChecksExecutedDuringInterval; static int m_ChecksExecutedDuringInterval;

View File

@ -12,7 +12,7 @@
using namespace icinga; using namespace icinga;
static int l_NextCommentID = 1; static int l_NextCommentID = 1;
static boost::mutex l_CommentMutex; static std::mutex l_CommentMutex;
static std::map<int, String> l_LegacyCommentsCache; static std::map<int, String> l_LegacyCommentsCache;
static Timer::Ptr l_CommentsExpireTimer; static Timer::Ptr l_CommentsExpireTimer;
@ -87,7 +87,7 @@ void Comment::Start(bool runtimeCreated)
}); });
{ {
boost::mutex::scoped_lock lock(l_CommentMutex); std::unique_lock<std::mutex> lock(l_CommentMutex);
SetLegacyId(l_NextCommentID); SetLegacyId(l_NextCommentID);
l_LegacyCommentsCache[l_NextCommentID] = GetName(); l_LegacyCommentsCache[l_NextCommentID] = GetName();
@ -124,7 +124,7 @@ bool Comment::IsExpired() const
int Comment::GetNextCommentID() int Comment::GetNextCommentID()
{ {
boost::mutex::scoped_lock lock(l_CommentMutex); std::unique_lock<std::mutex> lock(l_CommentMutex);
return l_NextCommentID; return l_NextCommentID;
} }
@ -209,7 +209,7 @@ void Comment::RemoveComment(const String& id, const MessageOrigin::Ptr& origin)
String Comment::GetCommentIDFromLegacyID(int id) String Comment::GetCommentIDFromLegacyID(int id)
{ {
boost::mutex::scoped_lock lock(l_CommentMutex); std::unique_lock<std::mutex> lock(l_CommentMutex);
auto it = l_LegacyCommentsCache.find(id); auto it = l_LegacyCommentsCache.find(id);

View File

@ -13,7 +13,7 @@
using namespace icinga; using namespace icinga;
static int l_NextDowntimeID = 1; static int l_NextDowntimeID = 1;
static boost::mutex l_DowntimeMutex; static std::mutex l_DowntimeMutex;
static std::map<int, String> l_LegacyDowntimesCache; static std::map<int, String> l_LegacyDowntimesCache;
static Timer::Ptr l_DowntimesExpireTimer; static Timer::Ptr l_DowntimesExpireTimer;
static Timer::Ptr l_DowntimesStartTimer; static Timer::Ptr l_DowntimesStartTimer;
@ -103,7 +103,7 @@ void Downtime::Start(bool runtimeCreated)
}); });
{ {
boost::mutex::scoped_lock lock(l_DowntimeMutex); std::unique_lock<std::mutex> lock(l_DowntimeMutex);
SetLegacyId(l_NextDowntimeID); SetLegacyId(l_NextDowntimeID);
l_LegacyDowntimesCache[l_NextDowntimeID] = GetName(); l_LegacyDowntimesCache[l_NextDowntimeID] = GetName();
@ -201,7 +201,7 @@ bool Downtime::HasValidConfigOwner() const
int Downtime::GetNextDowntimeID() int Downtime::GetNextDowntimeID()
{ {
boost::mutex::scoped_lock lock(l_DowntimeMutex); std::unique_lock<std::mutex> lock(l_DowntimeMutex);
return l_NextDowntimeID; return l_NextDowntimeID;
} }
@ -405,7 +405,7 @@ void Downtime::TriggerDowntime()
String Downtime::GetDowntimeIDFromLegacyID(int id) String Downtime::GetDowntimeIDFromLegacyID(int id)
{ {
boost::mutex::scoped_lock lock(l_DowntimeMutex); std::unique_lock<std::mutex> lock(l_DowntimeMutex);
auto it = l_LegacyDowntimesCache.find(id); auto it = l_LegacyDowntimesCache.find(id);

View File

@ -68,7 +68,7 @@ void ExternalCommandProcessor::Execute(double time, const String& command, const
}); });
{ {
boost::mutex::scoped_lock lock(GetMutex()); std::unique_lock<std::mutex> lock(GetMutex());
auto it = GetCommands().find(command); auto it = GetCommands().find(command);
@ -107,7 +107,7 @@ void ExternalCommandProcessor::Execute(double time, const String& command, const
void ExternalCommandProcessor::RegisterCommand(const String& command, const ExternalCommandCallback& callback, size_t minArgs, size_t maxArgs) void ExternalCommandProcessor::RegisterCommand(const String& command, const ExternalCommandCallback& callback, size_t minArgs, size_t maxArgs)
{ {
boost::mutex::scoped_lock lock(GetMutex()); std::unique_lock<std::mutex> lock(GetMutex());
ExternalCommandInfo eci; ExternalCommandInfo eci;
eci.Callback = callback; eci.Callback = callback;
eci.MinArgs = minArgs; eci.MinArgs = minArgs;
@ -2267,9 +2267,9 @@ void ExternalCommandProcessor::DisableServicegroupSvcNotifications(double, const
} }
} }
boost::mutex& ExternalCommandProcessor::GetMutex() std::mutex& ExternalCommandProcessor::GetMutex()
{ {
static boost::mutex mtx; static std::mutex mtx;
return mtx; return mtx;
} }

View File

@ -159,7 +159,7 @@ private:
static void RegisterCommand(const String& command, const ExternalCommandCallback& callback, size_t minArgs = 0, size_t maxArgs = UINT_MAX); static void RegisterCommand(const String& command, const ExternalCommandCallback& callback, size_t minArgs = 0, size_t maxArgs = UINT_MAX);
static void RegisterCommands(); static void RegisterCommands();
static boost::mutex& GetMutex(); static std::mutex& GetMutex();
static std::map<String, ExternalCommandInfo>& GetCommands(); static std::map<String, ExternalCommandInfo>& GetCommands();
}; };

View File

@ -84,7 +84,7 @@ void Host::Stop(bool runtimeRemoved)
std::vector<Service::Ptr> Host::GetServices() const std::vector<Service::Ptr> Host::GetServices() const
{ {
boost::mutex::scoped_lock lock(m_ServicesMutex); std::unique_lock<std::mutex> lock(m_ServicesMutex);
std::vector<Service::Ptr> services; std::vector<Service::Ptr> services;
services.reserve(m_Services.size()); services.reserve(m_Services.size());
@ -98,14 +98,14 @@ std::vector<Service::Ptr> Host::GetServices() const
void Host::AddService(const Service::Ptr& service) void Host::AddService(const Service::Ptr& service)
{ {
boost::mutex::scoped_lock lock(m_ServicesMutex); std::unique_lock<std::mutex> lock(m_ServicesMutex);
m_Services[service->GetShortName()] = service; m_Services[service->GetShortName()] = service;
} }
void Host::RemoveService(const Service::Ptr& service) void Host::RemoveService(const Service::Ptr& service)
{ {
boost::mutex::scoped_lock lock(m_ServicesMutex); std::unique_lock<std::mutex> lock(m_ServicesMutex);
m_Services.erase(service->GetShortName()); m_Services.erase(service->GetShortName());
} }
@ -119,7 +119,7 @@ Service::Ptr Host::GetServiceByShortName(const Value& name)
{ {
if (name.IsScalar()) { if (name.IsScalar()) {
{ {
boost::mutex::scoped_lock lock(m_ServicesMutex); std::unique_lock<std::mutex> lock(m_ServicesMutex);
auto it = m_Services.find(name); auto it = m_Services.find(name);

View File

@ -57,7 +57,7 @@ protected:
void CreateChildObjects(const Type::Ptr& childType) override; void CreateChildObjects(const Type::Ptr& childType) override;
private: private:
mutable boost::mutex m_ServicesMutex; mutable std::mutex m_ServicesMutex;
std::map<String, intrusive_ptr<Service> > m_Services; std::map<String, intrusive_ptr<Service> > m_Services;
static void RefreshServicesCache(); static void RefreshServicesCache();

View File

@ -58,7 +58,7 @@ void HostGroup::EvaluateObjectRules(const Host::Ptr& host)
std::set<Host::Ptr> HostGroup::GetMembers() const std::set<Host::Ptr> HostGroup::GetMembers() const
{ {
boost::mutex::scoped_lock lock(m_HostGroupMutex); std::unique_lock<std::mutex> lock(m_HostGroupMutex);
return m_Members; return m_Members;
} }
@ -66,13 +66,13 @@ void HostGroup::AddMember(const Host::Ptr& host)
{ {
host->AddGroup(GetName()); host->AddGroup(GetName());
boost::mutex::scoped_lock lock(m_HostGroupMutex); std::unique_lock<std::mutex> lock(m_HostGroupMutex);
m_Members.insert(host); m_Members.insert(host);
} }
void HostGroup::RemoveMember(const Host::Ptr& host) void HostGroup::RemoveMember(const Host::Ptr& host)
{ {
boost::mutex::scoped_lock lock(m_HostGroupMutex); std::unique_lock<std::mutex> lock(m_HostGroupMutex);
m_Members.erase(host); m_Members.erase(host);
} }

View File

@ -32,7 +32,7 @@ public:
static void EvaluateObjectRules(const Host::Ptr& host); static void EvaluateObjectRules(const Host::Ptr& host);
private: private:
mutable boost::mutex m_HostGroupMutex; mutable std::mutex m_HostGroupMutex;
std::set<Host::Ptr> m_Members; std::set<Host::Ptr> m_Members;
static bool EvaluateObjectRule(const Host::Ptr& host, const intrusive_ptr<ConfigItem>& item); static bool EvaluateObjectRule(const Host::Ptr& host, const intrusive_ptr<ConfigItem>& item);

View File

@ -61,7 +61,7 @@ void ServiceGroup::EvaluateObjectRules(const Service::Ptr& service)
std::set<Service::Ptr> ServiceGroup::GetMembers() const std::set<Service::Ptr> ServiceGroup::GetMembers() const
{ {
boost::mutex::scoped_lock lock(m_ServiceGroupMutex); std::unique_lock<std::mutex> lock(m_ServiceGroupMutex);
return m_Members; return m_Members;
} }
@ -69,13 +69,13 @@ void ServiceGroup::AddMember(const Service::Ptr& service)
{ {
service->AddGroup(GetName()); service->AddGroup(GetName());
boost::mutex::scoped_lock lock(m_ServiceGroupMutex); std::unique_lock<std::mutex> lock(m_ServiceGroupMutex);
m_Members.insert(service); m_Members.insert(service);
} }
void ServiceGroup::RemoveMember(const Service::Ptr& service) void ServiceGroup::RemoveMember(const Service::Ptr& service)
{ {
boost::mutex::scoped_lock lock(m_ServiceGroupMutex); std::unique_lock<std::mutex> lock(m_ServiceGroupMutex);
m_Members.erase(service); m_Members.erase(service);
} }

View File

@ -32,7 +32,7 @@ public:
static void EvaluateObjectRules(const Service::Ptr& service); static void EvaluateObjectRules(const Service::Ptr& service);
private: private:
mutable boost::mutex m_ServiceGroupMutex; mutable std::mutex m_ServiceGroupMutex;
std::set<Service::Ptr> m_Members; std::set<Service::Ptr> m_Members;
static bool EvaluateObjectRule(const Service::Ptr& service, const intrusive_ptr<ConfigItem>& group); static bool EvaluateObjectRule(const Service::Ptr& service, const intrusive_ptr<ConfigItem>& group);

View File

@ -62,7 +62,7 @@ void User::Stop(bool runtimeRemoved)
void User::AddGroup(const String& name) void User::AddGroup(const String& name)
{ {
boost::mutex::scoped_lock lock(m_UserMutex); std::unique_lock<std::mutex> lock(m_UserMutex);
Array::Ptr groups = GetGroups(); Array::Ptr groups = GetGroups();

View File

@ -36,7 +36,7 @@ protected:
void OnConfigLoaded() override; void OnConfigLoaded() override;
void OnAllConfigLoaded() override; void OnAllConfigLoaded() override;
private: private:
mutable boost::mutex m_UserMutex; mutable std::mutex m_UserMutex;
}; };
} }

View File

@ -58,7 +58,7 @@ void UserGroup::EvaluateObjectRules(const User::Ptr& user)
std::set<User::Ptr> UserGroup::GetMembers() const std::set<User::Ptr> UserGroup::GetMembers() const
{ {
boost::mutex::scoped_lock lock(m_UserGroupMutex); std::unique_lock<std::mutex> lock(m_UserGroupMutex);
return m_Members; return m_Members;
} }
@ -66,13 +66,13 @@ void UserGroup::AddMember(const User::Ptr& user)
{ {
user->AddGroup(GetName()); user->AddGroup(GetName());
boost::mutex::scoped_lock lock(m_UserGroupMutex); std::unique_lock<std::mutex> lock(m_UserGroupMutex);
m_Members.insert(user); m_Members.insert(user);
} }
void UserGroup::RemoveMember(const User::Ptr& user) void UserGroup::RemoveMember(const User::Ptr& user)
{ {
boost::mutex::scoped_lock lock(m_UserGroupMutex); std::unique_lock<std::mutex> lock(m_UserGroupMutex);
m_Members.erase(user); m_Members.erase(user);
} }

View File

@ -32,7 +32,7 @@ public:
static void EvaluateObjectRules(const User::Ptr& user); static void EvaluateObjectRules(const User::Ptr& user);
private: private:
mutable boost::mutex m_UserGroupMutex; mutable std::mutex m_UserGroupMutex;
std::set<User::Ptr> m_Members; std::set<User::Ptr> m_Members;
static bool EvaluateObjectRule(const User::Ptr& user, const intrusive_ptr<ConfigItem>& group); static bool EvaluateObjectRule(const User::Ptr& user, const intrusive_ptr<ConfigItem>& group);

View File

@ -22,7 +22,7 @@ REGISTER_TYPE(LivestatusListener);
static int l_ClientsConnected = 0; static int l_ClientsConnected = 0;
static int l_Connections = 0; static int l_Connections = 0;
static boost::mutex l_ComponentMutex; static std::mutex l_ComponentMutex;
REGISTER_STATSFUNCTION(LivestatusListener, &LivestatusListener::StatsFunc); REGISTER_STATSFUNCTION(LivestatusListener, &LivestatusListener::StatsFunc);
@ -119,14 +119,14 @@ void LivestatusListener::Stop(bool runtimeRemoved)
int LivestatusListener::GetClientsConnected() int LivestatusListener::GetClientsConnected()
{ {
boost::mutex::scoped_lock lock(l_ComponentMutex); std::unique_lock<std::mutex> lock(l_ComponentMutex);
return l_ClientsConnected; return l_ClientsConnected;
} }
int LivestatusListener::GetConnections() int LivestatusListener::GetConnections()
{ {
boost::mutex::scoped_lock lock(l_ComponentMutex); std::unique_lock<std::mutex> lock(l_ComponentMutex);
return l_Connections; return l_Connections;
} }
@ -158,7 +158,7 @@ void LivestatusListener::ServerThreadProc()
void LivestatusListener::ClientHandler(const Socket::Ptr& client) void LivestatusListener::ClientHandler(const Socket::Ptr& client)
{ {
{ {
boost::mutex::scoped_lock lock(l_ComponentMutex); std::unique_lock<std::mutex> lock(l_ComponentMutex);
l_ClientsConnected++; l_ClientsConnected++;
l_Connections++; l_Connections++;
} }
@ -196,7 +196,7 @@ void LivestatusListener::ClientHandler(const Socket::Ptr& client)
} }
{ {
boost::mutex::scoped_lock lock(l_ComponentMutex); std::unique_lock<std::mutex> lock(l_ComponentMutex);
l_ClientsConnected--; l_ClientsConnected--;
} }
} }

View File

@ -30,7 +30,7 @@
using namespace icinga; using namespace icinga;
static int l_ExternalCommands = 0; static int l_ExternalCommands = 0;
static boost::mutex l_QueryMutex; static std::mutex l_QueryMutex;
LivestatusQuery::LivestatusQuery(const std::vector<String>& lines, const String& compat_log_path) LivestatusQuery::LivestatusQuery(const std::vector<String>& lines, const String& compat_log_path)
: m_KeepAlive(false), m_OutputFormat("csv"), m_ColumnHeaders(true), m_Limit(-1), m_ErrorCode(0), : m_KeepAlive(false), m_OutputFormat("csv"), m_ColumnHeaders(true), m_Limit(-1), m_ErrorCode(0),
@ -260,7 +260,7 @@ LivestatusQuery::LivestatusQuery(const std::vector<String>& lines, const String&
int LivestatusQuery::GetExternalCommands() int LivestatusQuery::GetExternalCommands()
{ {
boost::mutex::scoped_lock lock(l_QueryMutex); std::unique_lock<std::mutex> lock(l_QueryMutex);
return l_ExternalCommands; return l_ExternalCommands;
} }
@ -573,7 +573,7 @@ void LivestatusQuery::ExecuteGetHelper(const Stream::Ptr& stream)
void LivestatusQuery::ExecuteCommandHelper(const Stream::Ptr& stream) void LivestatusQuery::ExecuteCommandHelper(const Stream::Ptr& stream)
{ {
{ {
boost::mutex::scoped_lock lock(l_QueryMutex); std::unique_lock<std::mutex> lock(l_QueryMutex);
l_ExternalCommands++; l_ExternalCommands++;
} }

View File

@ -4,7 +4,6 @@
#define LOGTABLE_H #define LOGTABLE_H
#include "livestatus/historytable.hpp" #include "livestatus/historytable.hpp"
#include <boost/thread/mutex.hpp>
using namespace icinga; using namespace icinga;

View File

@ -5,7 +5,6 @@
#include "icinga/service.hpp" #include "icinga/service.hpp"
#include "livestatus/historytable.hpp" #include "livestatus/historytable.hpp"
#include <boost/thread/mutex.hpp>
using namespace icinga; using namespace icinga;

View File

@ -365,7 +365,7 @@ void ElasticsearchWriter::Enqueue(const Checkable::Ptr& checkable, const String&
const Dictionary::Ptr& fields, double ts) const Dictionary::Ptr& fields, double ts)
{ {
/* Atomically buffer the data point. */ /* Atomically buffer the data point. */
boost::mutex::scoped_lock lock(m_DataBufferMutex); std::unique_lock<std::mutex> lock(m_DataBufferMutex);
/* Format the timestamps to dynamically select the date datatype inside the index. */ /* Format the timestamps to dynamically select the date datatype inside the index. */
fields->Set("@timestamp", FormatTimestamp(ts)); fields->Set("@timestamp", FormatTimestamp(ts));
@ -398,7 +398,7 @@ void ElasticsearchWriter::FlushTimeout()
/* Prevent new data points from being added to the array, there is a /* Prevent new data points from being added to the array, there is a
* race condition where they could disappear. * race condition where they could disappear.
*/ */
boost::mutex::scoped_lock lock(m_DataBufferMutex); std::unique_lock<std::mutex> lock(m_DataBufferMutex);
/* Flush if there are any data available. */ /* Flush if there are any data available. */
if (m_DataBuffer.size() > 0) { if (m_DataBuffer.size() > 0) {

View File

@ -33,7 +33,7 @@ private:
WorkQueue m_WorkQueue{10000000, 1}; WorkQueue m_WorkQueue{10000000, 1};
Timer::Ptr m_FlushTimer; Timer::Ptr m_FlushTimer;
std::vector<String> m_DataBuffer; std::vector<String> m_DataBuffer;
boost::mutex m_DataBufferMutex; std::mutex m_DataBufferMutex;
void AddCheckResult(const Dictionary::Ptr& fields, const Checkable::Ptr& checkable, const CheckResult::Ptr& cr); void AddCheckResult(const Dictionary::Ptr& fields, const Checkable::Ptr& checkable, const CheckResult::Ptr& cr);

View File

@ -398,7 +398,7 @@ void GraphiteWriter::SendMetric(const Checkable::Ptr& checkable, const String& p
// do not send \n to debug log // do not send \n to debug log
msgbuf << "\n"; msgbuf << "\n";
boost::mutex::scoped_lock lock(m_StreamMutex); std::unique_lock<std::mutex> lock(m_StreamMutex);
if (!GetConnected()) if (!GetConnected())
return; return;

View File

@ -10,7 +10,7 @@
#include "base/timer.hpp" #include "base/timer.hpp"
#include "base/workqueue.hpp" #include "base/workqueue.hpp"
#include <fstream> #include <fstream>
#include <boost/thread/mutex.hpp> #include <mutex>
namespace icinga namespace icinga
{ {
@ -38,7 +38,7 @@ protected:
private: private:
Shared<AsioTcpStream>::Ptr m_Stream; Shared<AsioTcpStream>::Ptr m_Stream;
boost::mutex m_StreamMutex; std::mutex m_StreamMutex;
WorkQueue m_WorkQueue{10000000, 1}; WorkQueue m_WorkQueue{10000000, 1};
Timer::Ptr m_ReconnectTimer; Timer::Ptr m_ReconnectTimer;

View File

@ -118,7 +118,7 @@ void PerfdataWriter::CheckResultHandler(const Checkable::Ptr& checkable, const C
String line = MacroProcessor::ResolveMacros(GetServiceFormatTemplate(), resolvers, cr, nullptr, &PerfdataWriter::EscapeMacroMetric); String line = MacroProcessor::ResolveMacros(GetServiceFormatTemplate(), resolvers, cr, nullptr, &PerfdataWriter::EscapeMacroMetric);
{ {
boost::mutex::scoped_lock lock(m_StreamMutex); std::unique_lock<std::mutex> lock(m_StreamMutex);
if (!m_ServiceOutputFile.good()) if (!m_ServiceOutputFile.good())
return; return;
@ -129,7 +129,7 @@ void PerfdataWriter::CheckResultHandler(const Checkable::Ptr& checkable, const C
String line = MacroProcessor::ResolveMacros(GetHostFormatTemplate(), resolvers, cr, nullptr, &PerfdataWriter::EscapeMacroMetric); String line = MacroProcessor::ResolveMacros(GetHostFormatTemplate(), resolvers, cr, nullptr, &PerfdataWriter::EscapeMacroMetric);
{ {
boost::mutex::scoped_lock lock(m_StreamMutex); std::unique_lock<std::mutex> lock(m_StreamMutex);
if (!m_HostOutputFile.good()) if (!m_HostOutputFile.good())
return; return;
@ -144,7 +144,7 @@ void PerfdataWriter::RotateFile(std::ofstream& output, const String& temp_path,
Log(LogDebug, "PerfdataWriter") Log(LogDebug, "PerfdataWriter")
<< "Rotating perfdata files."; << "Rotating perfdata files.";
boost::mutex::scoped_lock lock(m_StreamMutex); std::unique_lock<std::mutex> lock(m_StreamMutex);
if (output.good()) { if (output.good()) {
output.close(); output.close();

View File

@ -37,7 +37,7 @@ private:
Timer::Ptr m_RotationTimer; Timer::Ptr m_RotationTimer;
std::ofstream m_ServiceOutputFile; std::ofstream m_ServiceOutputFile;
std::ofstream m_HostOutputFile; std::ofstream m_HostOutputFile;
boost::mutex m_StreamMutex; std::mutex m_StreamMutex;
void CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr); void CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr);
static Value EscapeMacroMetric(const Value& value); static Value EscapeMacroMetric(const Value& value);

View File

@ -252,7 +252,7 @@ void ApiListener::Start(bool runtimeCreated)
ObjectImpl<ApiListener>::Start(runtimeCreated); ObjectImpl<ApiListener>::Start(runtimeCreated);
{ {
boost::mutex::scoped_lock lock(m_LogLock); std::unique_lock<std::mutex> lock(m_LogLock);
OpenLogFile(); OpenLogFile();
} }
@ -306,7 +306,7 @@ void ApiListener::Stop(bool runtimeDeleted)
<< "'" << GetName() << "' stopped."; << "'" << GetName() << "' stopped.";
{ {
boost::mutex::scoped_lock lock(m_LogLock); std::unique_lock<std::mutex> lock(m_LogLock);
CloseLogFile(); CloseLogFile();
RotateLogFile(); RotateLogFile();
} }
@ -1048,7 +1048,7 @@ void ApiListener::PersistMessage(const Dictionary::Ptr& message, const ConfigObj
pmessage->Set("secobj", secname); pmessage->Set("secobj", secname);
} }
boost::mutex::scoped_lock lock(m_LogLock); std::unique_lock<std::mutex> lock(m_LogLock);
if (m_LogFile) { if (m_LogFile) {
NetString::WriteStringToStream(m_LogFile, JsonEncode(pmessage)); NetString::WriteStringToStream(m_LogFile, JsonEncode(pmessage));
m_LogMessageCount++; m_LogMessageCount++;
@ -1347,7 +1347,7 @@ void ApiListener::ReplayLog(const JsonRpcConnection::Ptr& client)
} }
for (;;) { for (;;) {
boost::mutex::scoped_lock lock(m_LogLock); std::unique_lock<std::mutex> lock(m_LogLock);
CloseLogFile(); CloseLogFile();
@ -1624,7 +1624,7 @@ double ApiListener::CalculateZoneLag(const Endpoint::Ptr& endpoint)
bool ApiListener::AddAnonymousClient(const JsonRpcConnection::Ptr& aclient) bool ApiListener::AddAnonymousClient(const JsonRpcConnection::Ptr& aclient)
{ {
boost::mutex::scoped_lock lock(m_AnonymousClientsLock); std::unique_lock<std::mutex> lock(m_AnonymousClientsLock);
if (GetMaxAnonymousClients() >= 0 && (long)m_AnonymousClients.size() + 1 > (long)GetMaxAnonymousClients()) if (GetMaxAnonymousClients() >= 0 && (long)m_AnonymousClients.size() + 1 > (long)GetMaxAnonymousClients())
return false; return false;
@ -1635,31 +1635,31 @@ bool ApiListener::AddAnonymousClient(const JsonRpcConnection::Ptr& aclient)
void ApiListener::RemoveAnonymousClient(const JsonRpcConnection::Ptr& aclient) void ApiListener::RemoveAnonymousClient(const JsonRpcConnection::Ptr& aclient)
{ {
boost::mutex::scoped_lock lock(m_AnonymousClientsLock); std::unique_lock<std::mutex> lock(m_AnonymousClientsLock);
m_AnonymousClients.erase(aclient); m_AnonymousClients.erase(aclient);
} }
std::set<JsonRpcConnection::Ptr> ApiListener::GetAnonymousClients() const std::set<JsonRpcConnection::Ptr> ApiListener::GetAnonymousClients() const
{ {
boost::mutex::scoped_lock lock(m_AnonymousClientsLock); std::unique_lock<std::mutex> lock(m_AnonymousClientsLock);
return m_AnonymousClients; return m_AnonymousClients;
} }
void ApiListener::AddHttpClient(const HttpServerConnection::Ptr& aclient) void ApiListener::AddHttpClient(const HttpServerConnection::Ptr& aclient)
{ {
boost::mutex::scoped_lock lock(m_HttpClientsLock); std::unique_lock<std::mutex> lock(m_HttpClientsLock);
m_HttpClients.insert(aclient); m_HttpClients.insert(aclient);
} }
void ApiListener::RemoveHttpClient(const HttpServerConnection::Ptr& aclient) void ApiListener::RemoveHttpClient(const HttpServerConnection::Ptr& aclient)
{ {
boost::mutex::scoped_lock lock(m_HttpClientsLock); std::unique_lock<std::mutex> lock(m_HttpClientsLock);
m_HttpClients.erase(aclient); m_HttpClients.erase(aclient);
} }
std::set<HttpServerConnection::Ptr> ApiListener::GetHttpClients() const std::set<HttpServerConnection::Ptr> ApiListener::GetHttpClients() const
{ {
boost::mutex::scoped_lock lock(m_HttpClientsLock); std::unique_lock<std::mutex> lock(m_HttpClientsLock);
return m_HttpClients; return m_HttpClients;
} }
@ -1718,7 +1718,7 @@ Endpoint::Ptr ApiListener::GetLocalEndpoint() const
void ApiListener::UpdateActivePackageStagesCache() void ApiListener::UpdateActivePackageStagesCache()
{ {
boost::mutex::scoped_lock lock(m_ActivePackageStagesLock); std::unique_lock<std::mutex> lock(m_ActivePackageStagesLock);
for (auto package : ConfigPackageUtility::GetPackages()) { for (auto package : ConfigPackageUtility::GetPackages()) {
String activeStage; String activeStage;
@ -1740,7 +1740,7 @@ void ApiListener::UpdateActivePackageStagesCache()
void ApiListener::CheckApiPackageIntegrity() void ApiListener::CheckApiPackageIntegrity()
{ {
boost::mutex::scoped_lock lock(m_ActivePackageStagesLock); std::unique_lock<std::mutex> lock(m_ActivePackageStagesLock);
for (auto package : ConfigPackageUtility::GetPackages()) { for (auto package : ConfigPackageUtility::GetPackages()) {
String activeStage; String activeStage;
@ -1766,13 +1766,13 @@ void ApiListener::CheckApiPackageIntegrity()
void ApiListener::SetActivePackageStage(const String& package, const String& stage) void ApiListener::SetActivePackageStage(const String& package, const String& stage)
{ {
boost::mutex::scoped_lock lock(m_ActivePackageStagesLock); std::unique_lock<std::mutex> lock(m_ActivePackageStagesLock);
m_ActivePackageStages[package] = stage; m_ActivePackageStages[package] = stage;
} }
String ApiListener::GetActivePackageStage(const String& package) String ApiListener::GetActivePackageStage(const String& package)
{ {
boost::mutex::scoped_lock lock(m_ActivePackageStagesLock); std::unique_lock<std::mutex> lock(m_ActivePackageStagesLock);
if (m_ActivePackageStages.find(package) == m_ActivePackageStages.end()) if (m_ActivePackageStages.find(package) == m_ActivePackageStages.end())
BOOST_THROW_EXCEPTION(ScriptError("Package " + package + " has no active stage.")); BOOST_THROW_EXCEPTION(ScriptError("Package " + package + " has no active stage."));
@ -1783,7 +1783,7 @@ String ApiListener::GetActivePackageStage(const String& package)
void ApiListener::RemoveActivePackageStage(const String& package) void ApiListener::RemoveActivePackageStage(const String& package)
{ {
/* This is the rare occassion when a package has been deleted. */ /* This is the rare occassion when a package has been deleted. */
boost::mutex::scoped_lock lock(m_ActivePackageStagesLock); std::unique_lock<std::mutex> lock(m_ActivePackageStagesLock);
auto it = m_ActivePackageStages.find(package); auto it = m_ActivePackageStages.find(package);

View File

@ -160,8 +160,8 @@ protected:
private: private:
Shared<boost::asio::ssl::context>::Ptr m_SSLContext; Shared<boost::asio::ssl::context>::Ptr m_SSLContext;
mutable boost::mutex m_AnonymousClientsLock; mutable std::mutex m_AnonymousClientsLock;
mutable boost::mutex m_HttpClientsLock; mutable std::mutex m_HttpClientsLock;
std::set<JsonRpcConnection::Ptr> m_AnonymousClients; std::set<JsonRpcConnection::Ptr> m_AnonymousClients;
std::set<HttpServerConnection::Ptr> m_HttpClients; std::set<HttpServerConnection::Ptr> m_HttpClients;
@ -197,7 +197,7 @@ private:
WorkQueue m_RelayQueue; WorkQueue m_RelayQueue;
WorkQueue m_SyncQueue{0, 4}; WorkQueue m_SyncQueue{0, 4};
boost::mutex m_LogLock; std::mutex m_LogLock;
Stream::Ptr m_LogFile; Stream::Ptr m_LogFile;
size_t m_LogMessageCount{0}; size_t m_LogMessageCount{0};
@ -247,7 +247,7 @@ private:
void SyncClient(const JsonRpcConnection::Ptr& aclient, const Endpoint::Ptr& endpoint, bool needSync); void SyncClient(const JsonRpcConnection::Ptr& aclient, const Endpoint::Ptr& endpoint, bool needSync);
/* API Config Packages */ /* API Config Packages */
mutable boost::mutex m_ActivePackageStagesLock; mutable std::mutex m_ActivePackageStagesLock;
std::map<String, String> m_ActivePackageStages; std::map<String, String> m_ActivePackageStages;
void UpdateActivePackageStagesCache(); void UpdateActivePackageStagesCache();

View File

@ -86,7 +86,7 @@ void ConfigObjectUtility::RepairPackage(const String& package)
void ConfigObjectUtility::CreateStorage() void ConfigObjectUtility::CreateStorage()
{ {
boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticPackageMutex()); std::unique_lock<std::mutex> lock(ConfigPackageUtility::GetStaticPackageMutex());
/* For now, we only use _api as our creation target. */ /* For now, we only use _api as our creation target. */
String package = "_api"; String package = "_api";

View File

@ -63,7 +63,7 @@ void ConfigPackagesHandler::HandleGet(
ArrayData results; ArrayData results;
{ {
boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticPackageMutex()); std::unique_lock<std::mutex> lock(ConfigPackageUtility::GetStaticPackageMutex());
for (const String& package : packages) { for (const String& package : packages) {
String activeStage; String activeStage;
@ -111,7 +111,7 @@ void ConfigPackagesHandler::HandlePost(
} }
try { try {
boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticPackageMutex()); std::unique_lock<std::mutex> lock(ConfigPackageUtility::GetStaticPackageMutex());
ConfigPackageUtility::CreatePackage(packageName); ConfigPackageUtility::CreatePackage(packageName);
} catch (const std::exception& ex) { } catch (const std::exception& ex) {

View File

@ -187,7 +187,7 @@ void ConfigPackageUtility::TryActivateStageCallback(const ProcessResult& pr, con
if (pr.ExitStatus == 0) { if (pr.ExitStatus == 0) {
if (activate) { if (activate) {
{ {
boost::mutex::scoped_lock lock(GetStaticPackageMutex()); std::unique_lock<std::mutex> lock(GetStaticPackageMutex());
ActivateStage(packageName, stageName); ActivateStage(packageName, stageName);
} }
@ -254,7 +254,7 @@ std::vector<String> ConfigPackageUtility::GetStages(const String& packageName)
String ConfigPackageUtility::GetActiveStageFromFile(const String& packageName) String ConfigPackageUtility::GetActiveStageFromFile(const String& packageName)
{ {
/* Lock the transaction, reading this only happens on startup or when something really is broken. */ /* Lock the transaction, reading this only happens on startup or when something really is broken. */
boost::mutex::scoped_lock lock(GetStaticActiveStageMutex()); std::unique_lock<std::mutex> lock(GetStaticActiveStageMutex());
String path = GetPackageDir() + "/" + packageName + "/active-stage"; String path = GetPackageDir() + "/" + packageName + "/active-stage";
@ -274,7 +274,7 @@ String ConfigPackageUtility::GetActiveStageFromFile(const String& packageName)
void ConfigPackageUtility::SetActiveStageToFile(const String& packageName, const String& stageName) void ConfigPackageUtility::SetActiveStageToFile(const String& packageName, const String& stageName)
{ {
boost::mutex::scoped_lock lock(GetStaticActiveStageMutex()); std::unique_lock<std::mutex> lock(GetStaticActiveStageMutex());
String activeStagePath = GetPackageDir() + "/" + packageName + "/active-stage"; String activeStagePath = GetPackageDir() + "/" + packageName + "/active-stage";
@ -384,14 +384,14 @@ bool ConfigPackageUtility::ValidateName(const String& name)
return (!boost::regex_search(name.GetData(), what, expr)); return (!boost::regex_search(name.GetData(), what, expr));
} }
boost::mutex& ConfigPackageUtility::GetStaticPackageMutex() std::mutex& ConfigPackageUtility::GetStaticPackageMutex()
{ {
static boost::mutex mutex; static std::mutex mutex;
return mutex; return mutex;
} }
boost::mutex& ConfigPackageUtility::GetStaticActiveStageMutex() std::mutex& ConfigPackageUtility::GetStaticActiveStageMutex()
{ {
static boost::mutex mutex; static std::mutex mutex;
return mutex; return mutex;
} }

View File

@ -44,8 +44,8 @@ public:
static bool ContainsDotDot(const String& path); static bool ContainsDotDot(const String& path);
static bool ValidateName(const String& name); static bool ValidateName(const String& name);
static boost::mutex& GetStaticPackageMutex(); static std::mutex& GetStaticPackageMutex();
static boost::mutex& GetStaticActiveStageMutex(); static std::mutex& GetStaticActiveStageMutex();
private: private:
static void CollectDirNames(const String& path, std::vector<String>& dirs); static void CollectDirNames(const String& path, std::vector<String>& dirs);

View File

@ -128,7 +128,7 @@ void ConfigStagesHandler::HandlePost(
if (reload && !activate) if (reload && !activate)
BOOST_THROW_EXCEPTION(std::invalid_argument("Parameter 'reload' must be false when 'activate' is false.")); BOOST_THROW_EXCEPTION(std::invalid_argument("Parameter 'reload' must be false when 'activate' is false."));
boost::mutex::scoped_lock lock(ConfigPackageUtility::GetStaticPackageMutex()); std::unique_lock<std::mutex> lock(ConfigPackageUtility::GetStaticPackageMutex());
stageName = ConfigPackageUtility::CreateStage(packageName, files); stageName = ConfigPackageUtility::CreateStage(packageName, files);

View File

@ -20,14 +20,14 @@ using namespace icinga;
REGISTER_URLHANDLER("/v1/console", ConsoleHandler); REGISTER_URLHANDLER("/v1/console", ConsoleHandler);
static boost::mutex l_QueryMutex; static std::mutex l_QueryMutex;
static std::map<String, ApiScriptFrame> l_ApiScriptFrames; static std::map<String, ApiScriptFrame> l_ApiScriptFrames;
static Timer::Ptr l_FrameCleanupTimer; static Timer::Ptr l_FrameCleanupTimer;
static boost::mutex l_ApiScriptMutex; static std::mutex l_ApiScriptMutex;
static void ScriptFrameCleanupHandler() static void ScriptFrameCleanupHandler()
{ {
boost::mutex::scoped_lock lock(l_ApiScriptMutex); std::unique_lock<std::mutex> lock(l_ApiScriptMutex);
std::vector<String> cleanup_keys; std::vector<String> cleanup_keys;

View File

@ -40,7 +40,7 @@ void Endpoint::AddClient(const JsonRpcConnection::Ptr& client)
bool was_master = ApiListener::GetInstance()->IsMaster(); bool was_master = ApiListener::GetInstance()->IsMaster();
{ {
boost::mutex::scoped_lock lock(m_ClientsLock); std::unique_lock<std::mutex> lock(m_ClientsLock);
m_Clients.insert(client); m_Clients.insert(client);
} }
@ -57,7 +57,7 @@ void Endpoint::RemoveClient(const JsonRpcConnection::Ptr& client)
bool was_master = ApiListener::GetInstance()->IsMaster(); bool was_master = ApiListener::GetInstance()->IsMaster();
{ {
boost::mutex::scoped_lock lock(m_ClientsLock); std::unique_lock<std::mutex> lock(m_ClientsLock);
m_Clients.erase(client); m_Clients.erase(client);
Log(LogWarning, "ApiListener") Log(LogWarning, "ApiListener")
@ -76,7 +76,7 @@ void Endpoint::RemoveClient(const JsonRpcConnection::Ptr& client)
std::set<JsonRpcConnection::Ptr> Endpoint::GetClients() const std::set<JsonRpcConnection::Ptr> Endpoint::GetClients() const
{ {
boost::mutex::scoped_lock lock(m_ClientsLock); std::unique_lock<std::mutex> lock(m_ClientsLock);
return m_Clients; return m_Clients;
} }
@ -87,7 +87,7 @@ Zone::Ptr Endpoint::GetZone() const
bool Endpoint::GetConnected() const bool Endpoint::GetConnected() const
{ {
boost::mutex::scoped_lock lock(m_ClientsLock); std::unique_lock<std::mutex> lock(m_ClientsLock);
return !m_Clients.empty(); return !m_Clients.empty();
} }

View File

@ -53,7 +53,7 @@ protected:
void OnAllConfigLoaded() override; void OnAllConfigLoaded() override;
private: private:
mutable boost::mutex m_ClientsLock; mutable std::mutex m_ClientsLock;
std::set<intrusive_ptr<JsonRpcConnection> > m_Clients; std::set<intrusive_ptr<JsonRpcConnection> > m_Clients;
intrusive_ptr<Zone> m_Zone; intrusive_ptr<Zone> m_Zone;

View File

@ -11,6 +11,7 @@
#include <boost/date_time/posix_time/posix_time_duration.hpp> #include <boost/date_time/posix_time/posix_time_duration.hpp>
#include <boost/date_time/posix_time/ptime.hpp> #include <boost/date_time/posix_time/ptime.hpp>
#include <boost/system/error_code.hpp> #include <boost/system/error_code.hpp>
#include <chrono>
#include <utility> #include <utility>
using namespace icinga; using namespace icinga;
@ -21,7 +22,7 @@ EventQueue::EventQueue(String name)
bool EventQueue::CanProcessEvent(const String& type) const bool EventQueue::CanProcessEvent(const String& type) const
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
return m_Types.find(type) != m_Types.end(); return m_Types.find(type) != m_Types.end();
} }
@ -41,7 +42,7 @@ void EventQueue::ProcessEvent(const Dictionary::Ptr& event)
return; return;
} }
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
typedef std::pair<void *const, std::deque<Dictionary::Ptr> > kv_pair; typedef std::pair<void *const, std::deque<Dictionary::Ptr> > kv_pair;
for (kv_pair& kv : m_Events) { for (kv_pair& kv : m_Events) {
@ -53,7 +54,7 @@ void EventQueue::ProcessEvent(const Dictionary::Ptr& event)
void EventQueue::AddClient(void *client) void EventQueue::AddClient(void *client)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
auto result = m_Events.insert(std::make_pair(client, std::deque<Dictionary::Ptr>())); auto result = m_Events.insert(std::make_pair(client, std::deque<Dictionary::Ptr>()));
ASSERT(result.second); ASSERT(result.second);
@ -65,14 +66,14 @@ void EventQueue::AddClient(void *client)
void EventQueue::RemoveClient(void *client) void EventQueue::RemoveClient(void *client)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_Events.erase(client); m_Events.erase(client);
} }
void EventQueue::UnregisterIfUnused(const String& name, const EventQueue::Ptr& queue) void EventQueue::UnregisterIfUnused(const String& name, const EventQueue::Ptr& queue)
{ {
boost::mutex::scoped_lock lock(queue->m_Mutex); std::unique_lock<std::mutex> lock(queue->m_Mutex);
if (queue->m_Events.empty()) if (queue->m_Events.empty())
Unregister(name); Unregister(name);
@ -80,19 +81,19 @@ void EventQueue::UnregisterIfUnused(const String& name, const EventQueue::Ptr& q
void EventQueue::SetTypes(const std::set<String>& types) void EventQueue::SetTypes(const std::set<String>& types)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_Types = types; m_Types = types;
} }
void EventQueue::SetFilter(std::unique_ptr<Expression> filter) void EventQueue::SetFilter(std::unique_ptr<Expression> filter)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
m_Filter.swap(filter); m_Filter.swap(filter);
} }
Dictionary::Ptr EventQueue::WaitForEvent(void *client, double timeout) Dictionary::Ptr EventQueue::WaitForEvent(void *client, double timeout)
{ {
boost::mutex::scoped_lock lock(m_Mutex); std::unique_lock<std::mutex> lock(m_Mutex);
for (;;) { for (;;) {
auto it = m_Events.find(client); auto it = m_Events.find(client);
@ -104,7 +105,7 @@ Dictionary::Ptr EventQueue::WaitForEvent(void *client, double timeout)
return result; return result;
} }
if (!m_CV.timed_wait(lock, boost::posix_time::milliseconds(long(timeout * 1000)))) if (m_CV.wait_for(lock, std::chrono::duration<double>(timeout)) == std::cv_status::timeout)
return nullptr; return nullptr;
} }
} }

View File

@ -8,8 +8,7 @@
#include "config/expression.hpp" #include "config/expression.hpp"
#include <boost/asio/deadline_timer.hpp> #include <boost/asio/deadline_timer.hpp>
#include <boost/asio/spawn.hpp> #include <boost/asio/spawn.hpp>
#include <boost/thread/mutex.hpp> #include <condition_variable>
#include <boost/thread/condition_variable.hpp>
#include <cstddef> #include <cstddef>
#include <cstdint> #include <cstdint>
#include <mutex> #include <mutex>
@ -48,8 +47,8 @@ public:
private: private:
String m_Name; String m_Name;
mutable boost::mutex m_Mutex; mutable std::mutex m_Mutex;
boost::condition_variable m_CV; std::condition_variable m_CV;
std::set<String> m_Types; std::set<String> m_Types;
std::unique_ptr<Expression> m_Filter; std::unique_ptr<Expression> m_Filter;