diff options
Diffstat (limited to 'src/unix')
-rw-r--r-- | src/unix/Daemon.cxx | 14 | ||||
-rw-r--r-- | src/unix/PidFile.hxx | 16 |
2 files changed, 18 insertions, 12 deletions
diff --git a/src/unix/Daemon.cxx b/src/unix/Daemon.cxx index 4bb11aeac..d16de8928 100644 --- a/src/unix/Daemon.cxx +++ b/src/unix/Daemon.cxx @@ -65,25 +65,15 @@ static int detach_fd = -1; void daemonize_kill(void) { - FILE *fp; - int pid; - if (pidfile.IsNull()) FatalError("no pid_file specified in the config file"); - fp = FOpen(pidfile, PATH_LITERAL("r")); - if (fp == nullptr) { - const std::string utf8 = pidfile.ToUTF8(); - FormatFatalSystemError("Unable to open pid file \"%s\"", - utf8.c_str()); - } - - if (fscanf(fp, "%i", &pid) != 1) { + const pid_t pid = ReadPidFile(pidfile); + if (pid < 0) { const std::string utf8 = pidfile.ToUTF8(); FormatFatalError("unable to read the pid from file \"%s\"", utf8.c_str()); } - fclose(fp); if (kill(pid, SIGTERM) < 0) FormatFatalSystemError("unable to kill process %i", diff --git a/src/unix/PidFile.hxx b/src/unix/PidFile.hxx index 3c3d5ca21..a8af1e890 100644 --- a/src/unix/PidFile.hxx +++ b/src/unix/PidFile.hxx @@ -82,4 +82,20 @@ public: } }; +gcc_pure +static inline pid_t +ReadPidFile(Path path) +{ + FILE *fp = FOpen(path, PATH_LITERAL("r")); + if (fp == nullptr) + return -1; + + int pid; + if (fscanf(fp, "%i", &pid) != 1) + pid = -1; + + fclose(fp); + return pid; +} + #endif |