aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/init.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/init.cpp b/src/init.cpp
index 526a8d6271..ac52b34fc5 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -155,6 +155,11 @@ static const char* DEFAULT_ASMAP_FILENAME="ip_asn.map";
* The PID file facilities.
*/
static const char* BITCOIN_PID_FILENAME = "bitcoind.pid";
+/**
+ * True if this process has created a PID file.
+ * Used to determine whether we should remove the PID file on shutdown.
+ */
+static bool g_generated_pid{false};
static fs::path GetPidFile(const ArgsManager& args)
{
@@ -170,12 +175,24 @@ static fs::path GetPidFile(const ArgsManager& args)
#else
tfm::format(file, "%d\n", getpid());
#endif
+ g_generated_pid = true;
return true;
} else {
return InitError(strprintf(_("Unable to create the PID file '%s': %s"), fs::PathToString(GetPidFile(args)), SysErrorString(errno)));
}
}
+static void RemovePidFile(const ArgsManager& args)
+{
+ if (!g_generated_pid) return;
+ const auto pid_path{GetPidFile(args)};
+ if (std::error_code error; !fs::remove(pid_path, error)) {
+ std::string msg{error ? error.message() : "File does not exist"};
+ LogPrintf("Unable to remove PID file (%s): %s\n", fs::PathToString(pid_path), msg);
+ }
+}
+
+
//////////////////////////////////////////////////////////////////////////////
//
// Shutdown
@@ -352,13 +369,7 @@ void Shutdown(NodeContext& node)
node.scheduler.reset();
node.kernel.reset();
- try {
- if (!fs::remove(GetPidFile(*node.args))) {
- LogPrintf("%s: Unable to remove PID file: File does not exist\n", __func__);
- }
- } catch (const fs::filesystem_error& e) {
- LogPrintf("%s: Unable to remove PID file: %s\n", __func__, fsbridge::get_filesystem_error_message(e));
- }
+ RemovePidFile(*node.args);
LogPrintf("%s: done\n", __func__);
}