aboutsummaryrefslogtreecommitdiff
path: root/src/init.cpp
diff options
context:
space:
mode:
authorHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2019-02-02 00:40:36 +0200
committerHennadii Stepanov <32963518+hebasto@users.noreply.github.com>2019-02-02 01:07:23 +0200
commit561e375c73a37934fe77a519762d81edf7a3325c (patch)
treef76b7e57e4d74ccbbbfbf0cd6a09f37adf4dab28 /src/init.cpp
parent745a2ace18ce857bc712d7e66c8bad7c082c07e2 (diff)
downloadbitcoin-561e375c73a37934fe77a519762d81edf7a3325c.tar.xz
Make PID file creating errors fatal
Diffstat (limited to 'src/init.cpp')
-rw-r--r--src/init.cpp21
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())) {