diff options
-rw-r--r-- | doc/mpd.1 | 3 | ||||
-rw-r--r-- | doc/mpd.conf.5 | 2 | ||||
-rw-r--r-- | src/main.c | 45 |
3 files changed, 31 insertions, 19 deletions
@@ -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 <file> This specifies where the error file should be located. +.SH OPTIONAL PARAMETERS .TP .B pid_file <file> This specifies the file to save mpd's process ID in. -.SH OPTIONAL PARAMETERS .TP .B state_file <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", |