diff options
author | Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> | 2019-02-02 00:40:36 +0200 |
---|---|---|
committer | Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> | 2019-02-02 01:07:23 +0200 |
commit | 561e375c73a37934fe77a519762d81edf7a3325c (patch) | |
tree | f76b7e57e4d74ccbbbfbf0cd6a09f37adf4dab28 /src/init.cpp | |
parent | 745a2ace18ce857bc712d7e66c8bad7c082c07e2 (diff) |
Make PID file creating errors fatal
Diffstat (limited to 'src/init.cpp')
-rw-r--r-- | src/init.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/init.cpp b/src/init.cpp index a5cd4d3cd1..f8be487cb7 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -53,6 +53,8 @@ #include <stdio.h> #ifndef WIN32 +#include <attributes.h> +#include <cerrno> #include <signal.h> #include <sys/stat.h> #endif @@ -1192,12 +1194,29 @@ bool AppInitLockDataDirectory() return true; } +#ifndef WIN32 +NODISCARD static bool CreatePidFile() +{ + FILE* file = fsbridge::fopen(GetPidFile(), "w"); + if (file) { + fprintf(file, "%d\n", getpid()); + fclose(file); + return true; + } else { + return InitError(strprintf(_("Unable to create the PID file '%s': %s"), GetPidFile().string(), std::strerror(errno))); + } +} +#endif + bool AppInitMain(InitInterfaces& interfaces) { const CChainParams& chainparams = Params(); // ********************************************************* Step 4a: application initialization #ifndef WIN32 - CreatePidFile(GetPidFile(), getpid()); + if (!CreatePidFile()) { + // Detailed error printed inside CreatePidFile(). + return false; + } #endif if (g_logger->m_print_to_file) { if (gArgs.GetBoolArg("-shrinkdebugfile", g_logger->DefaultShrinkDebugFile())) { |