diff --git a/lib/base/application.cpp b/lib/base/application.cpp index 4d10ad027..9aea52c7b 100644 --- a/lib/base/application.cpp +++ b/lib/base/application.cpp @@ -80,7 +80,9 @@ void Application::Stop(bool runtimeRemoved) WSACleanup(); #endif /* _WIN32 */ +#ifdef _WIN32 ClosePidFile(true); +#endif /* _WIN32 */ ObjectImpl::Stop(runtimeRemoved); } @@ -964,6 +966,7 @@ int Application::Run() SetConsoleCtrlHandler(&Application::CtrlHandler, TRUE); #endif /* _WIN32 */ +#ifdef _WIN32 try { UpdatePidFile(Configuration::PidPath); } catch (const std::exception&) { @@ -971,6 +974,7 @@ int Application::Run() << "Cannot update PID file '" << Configuration::PidPath << "'. Aborting."; return EXIT_FAILURE; } +#endif /* _WIN32 */ SetMainTime(Utility::GetTime()); diff --git a/lib/base/application.hpp b/lib/base/application.hpp index de046daed..906f17f9a 100644 --- a/lib/base/application.hpp +++ b/lib/base/application.hpp @@ -132,7 +132,7 @@ private: static int m_ArgC; /**< The number of command-line arguments. */ static char **m_ArgV; /**< Command-line arguments. */ - FILE *m_PidFile; /**< The PID file */ + FILE *m_PidFile = nullptr; /**< The PID file */ static bool m_Debugging; /**< Whether debugging is enabled. */ static LogSeverity m_DebuggingSeverity; /**< Whether debugging severity is set. */ static double m_StartTime; diff --git a/lib/cli/daemoncommand.cpp b/lib/cli/daemoncommand.cpp index c2e55975b..0f5ad15eb 100644 --- a/lib/cli/daemoncommand.cpp +++ b/lib/cli/daemoncommand.cpp @@ -7,6 +7,7 @@ #include "config/configcompiler.hpp" #include "config/configcompilercontext.hpp" #include "config/configitembuilder.hpp" +#include "base/defer.hpp" #include "base/logger.hpp" #include "base/application.hpp" #include "base/timer.hpp" @@ -412,6 +413,15 @@ static pid_t StartUnixWorker(const std::vector& configs) return pid; } + +class PidFileManagementApp : public Application +{ +public: + inline int Main() override + { + return EXIT_FAILURE; + } +}; #endif /* _WIN32 */ /** @@ -466,6 +476,22 @@ int DaemonCommand::Run(const po::variables_map& vm, const std::vector