diff --git a/lib/base/application.cpp b/lib/base/application.cpp index 305107c98..89a0f55a2 100644 --- a/lib/base/application.cpp +++ b/lib/base/application.cpp @@ -62,7 +62,12 @@ int Application::m_ArgC; char **Application::m_ArgV; double Application::m_StartTime; bool Application::m_ScriptDebuggerEnabled = false; -double Application::m_LastReloadFailed; + +#ifdef _WIN32 +double Application::m_LastReloadFailed = 0; +#else /* _WIN32 */ +SharedMemory Application::m_LastReloadFailed (0); +#endif /* _WIN32 */ #ifdef _WIN32 static LPTOP_LEVEL_EXCEPTION_FILTER l_DefaultUnhandledExceptionFilter = nullptr; @@ -1208,12 +1213,20 @@ void Application::SetScriptDebuggerEnabled(bool enabled) double Application::GetLastReloadFailed() { +#ifdef _WIN32 return m_LastReloadFailed; +#else /* _WIN32 */ + return m_LastReloadFailed.Get().load(); +#endif /* _WIN32 */ } void Application::SetLastReloadFailed(double ts) { +#ifdef _WIN32 m_LastReloadFailed = ts; +#else /* _WIN32 */ + m_LastReloadFailed.Get().store(ts); +#endif /* _WIN32 */ } void Application::ValidateName(const Lazy& lvalue, const ValidationUtils& utils) diff --git a/lib/base/application.hpp b/lib/base/application.hpp index 53d0b0c8b..0578b8aa8 100644 --- a/lib/base/application.hpp +++ b/lib/base/application.hpp @@ -4,9 +4,11 @@ #define APPLICATION_H #include "base/i2-base.hpp" +#include "base/atomic.hpp" #include "base/application-ti.hpp" #include "base/logger.hpp" #include "base/configuration.hpp" +#include "base/shared-memory.hpp" #include namespace icinga @@ -137,7 +139,13 @@ private: static double m_StartTime; static double m_MainTime; static bool m_ScriptDebuggerEnabled; +#ifdef _WIN32 static double m_LastReloadFailed; +#else /* _WIN32 */ + typedef Atomic AtomicTs; + static_assert(AtomicTs::is_always_lock_free); + static SharedMemory m_LastReloadFailed; +#endif /* _WIN32 */ #ifdef _WIN32 static BOOL WINAPI CtrlHandler(DWORD type); diff --git a/lib/cli/daemoncommand.cpp b/lib/cli/daemoncommand.cpp index 1fca07b5c..3a9ce8c0a 100644 --- a/lib/cli/daemoncommand.cpp +++ b/lib/cli/daemoncommand.cpp @@ -813,6 +813,7 @@ int DaemonCommand::Run(const po::variables_map& vm, const std::vector