From 9b06d2cd4ac9e4e85c89f09de65b5772a8864a48 Mon Sep 17 00:00:00 2001 From: "J. Alexander Treuman" Date: Mon, 5 Jun 2006 20:05:24 +0000 Subject: [PATCH] Made pid_file an optional config parameter. git-svn-id: https://svn.musicpd.org/mpd/trunk@4250 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- doc/mpd.1 | 3 ++- doc/mpd.conf.5 | 2 +- src/main.c | 45 ++++++++++++++++++++++++++++----------------- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/doc/mpd.1 b/doc/mpd.1 index a11d892da..5741f6726 100644 --- a/doc/mpd.1 +++ b/doc/mpd.1 @@ -22,7 +22,8 @@ Read more about MPD at <\fBhttp://www.musicpd.org/\fP>. Output a brief help message. .TP .BI --kill -Kill the currently running mpd session. +Kill the currently running mpd session. The pid_file parameter must be +specified in the config file for this to work. .TP .BI --create-db Force (re)creation of database and exit. diff --git a/doc/mpd.conf.5 b/doc/mpd.conf.5 index 0e336c507..6a5336e92 100644 --- a/doc/mpd.conf.5 +++ b/doc/mpd.conf.5 @@ -43,10 +43,10 @@ This specifies where the log file should be located. .TP .B error_file This specifies where the error file should be located. +.SH OPTIONAL PARAMETERS .TP .B pid_file This specifies the file to save mpd's process ID in. -.SH OPTIONAL PARAMETERS .TP .B state_file This specifies if a state file is used and where it is located. The state of diff --git a/src/main.c b/src/main.c index 2b76f8d9d..304cb5208 100644 --- a/src/main.c +++ b/src/main.c @@ -372,18 +372,20 @@ void startMainProcess() { } void daemonize(Options * options) { - FILE * fp; - ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 1); + FILE * fp = NULL; + ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 0); - /* do this before daemon'izing so we can fail gracefully if we can't - * write to the pid file */ - DEBUG("opening pid file\n"); - fp = fopen(pidFileParam->value, "w+"); - if(!fp) { - ERROR("could not open %s \"%s\" (at line %i) for writing: %s\n", - CONF_PID_FILE, pidFileParam->value, - pidFileParam->line, strerror(errno)); - exit(EXIT_FAILURE); + if (pidFileParam) { + /* do this before daemon'izing so we can fail gracefully if we can't + * write to the pid file */ + DEBUG("opening pid file\n"); + fp = fopen(pidFileParam->value, "w+"); + if(!fp) { + ERROR("could not open %s \"%s\" (at line %i) for writing: %s\n", + CONF_PID_FILE, pidFileParam->value, + pidFileParam->line, strerror(errno)); + exit(EXIT_FAILURE); + } } if(options->daemon) { @@ -418,10 +420,12 @@ void daemonize(Options * options) { DEBUG("daemonized!\n"); } - DEBUG("writing pid file\n"); - fprintf(fp, "%lu\n", (unsigned long)getpid()); - fclose(fp); - masterPid = getpid(); + if (pidFileParam) { + DEBUG("writing pid file\n"); + fprintf(fp, "%lu\n", (unsigned long)getpid()); + fclose(fp); + masterPid = getpid(); + } } void setupLogOutput(Options * options, FILE * out, FILE * err) { @@ -461,7 +465,9 @@ void setupLogOutput(Options * options, FILE * out, FILE * err) { } void cleanUpPidFile() { - ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 1); + ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 0); + + if (!pidFileParam) return; DEBUG("cleaning up pid file\n"); @@ -472,9 +478,14 @@ void killFromPidFile(char * cmd, int killOption) { /*char buf[32]; struct stat st_cmd; struct stat st_exe;*/ - ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 1); + ConfigParam * pidFileParam = parseConfigFilePath(CONF_PID_FILE, 0); int pid; + if (!pidFileParam) { + ERROR("no pid_file specified in the config file\n"); + exit(EXIT_FAILURE); + } + FILE * fp = fopen(pidFileParam->value,"r"); if(!fp) { ERROR("unable to open %s \"%s\": %s\n",