summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 69f4a71)
raw | patch | inline | side by side (parent: 69f4a71)
author | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Fri, 26 Sep 2008 05:11:32 +0000 (05:11 +0000) | ||
committer | oetiker <oetiker@a5681a0c-68f1-0310-ab6d-d61299d08faa> | |
Fri, 26 Sep 2008 05:11:32 +0000 (05:11 +0000) |
program/src/rrd_daemon.c | patch | blob | history |
index 1c02a495cac793fe21f73e93f9af65ba47def510..d30893ed98e779e2215e5da0433c9056c1702063 100644 (file)
--- a/program/src/rrd_daemon.c
+++ b/program/src/rrd_daemon.c
pthread_cond_broadcast(&cache_cond);
} /* }}} void sig_term_handler */
-static int write_pidfile (void) /* {{{ */
+static int open_pidfile(void) /* {{{ */
{
- pid_t pid;
- char *file;
int fd;
- FILE *fh;
+ char *file;
- pid = getpid ();
-
file = (config_pid_file != NULL)
? config_pid_file
: LOCALSTATEDIR "/run/rrdcached.pid";
fd = open(file, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR|S_IRGRP|S_IROTH);
if (fd < 0)
- {
- RRDD_LOG(LOG_ERR, "FATAL: cannot create '%s' (%s)",
- file, rrd_strerror(errno));
- return (-1);
- }
+ fprintf(stderr, "FATAL: cannot create '%s' (%s)\n",
+ file, rrd_strerror(errno));
+
+ return(fd);
+}
+
+static int write_pidfile (int fd) /* {{{ */
+{
+ pid_t pid;
+ FILE *fh;
+
+ pid = getpid ();
fh = fdopen (fd, "w");
if (fh == NULL)
{
- RRDD_LOG (LOG_ERR, "write_pidfile: Opening `%s' failed.", file);
+ RRDD_LOG (LOG_ERR, "write_pidfile: fopen() failed.");
close(fd);
return (-1);
}
@@ -1816,6 +1819,7 @@ static void *listen_thread_main (void *args __attribute__((unused))) /* {{{ */
static int daemonize (void) /* {{{ */
{
int status;
+ int fd;
/* These structures are static, because `sigaction' behaves weird if the are
* overwritten.. */
static struct sigaction sa_term;
static struct sigaction sa_pipe;
+ fd = open_pidfile();
+ if (fd < 0) return fd;
+
if (!stay_foreground)
{
pid_t child;
return (-1);
}
- status = write_pidfile ();
+ status = write_pidfile (fd);
return status;
} /* }}} int daemonize */