diff options
Diffstat (limited to '')
-rw-r--r-- | daemon.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/daemon.c b/daemon.c index efeaf22..e4c3145 100644 --- a/daemon.c +++ b/daemon.c @@ -312,6 +312,14 @@ int main(int argc, char *argv[]) { } setTitle(); + struct pollfd *fds = calloc(1 + 2 * services.len, sizeof(*fds)); + if (!fds) { + syslog(LOG_ERR, "calloc: %m"); + goto shutdown; + } + fds[0].fd = fifo; + fds[0].events = POLLIN; + sigset_t mask; sigemptyset(&mask); for (;;) { @@ -331,6 +339,11 @@ int main(int argc, char *argv[]) { } if (signals[SIGHUP]) { parseConfig(configPath); + fds = reallocarray(fds, 1 + 2 * services.len, sizeof(*fds)); + if (!fds) { + syslog(LOG_ERR, "reallocarray: %m"); + goto shutdown; + } setTitle(); signals[SIGHUP] = 0; } @@ -340,10 +353,6 @@ int main(int argc, char *argv[]) { signals[SIGINFO] = 0; } - struct pollfd fds[1 + 2 * services.len]; - fds[0].fd = fifo; - fds[0].events = POLLIN; - struct timespec deadline = {0}; for (size_t i = 0; i < services.len; ++i) { struct Service *service = &services.ptr[i]; @@ -414,6 +423,7 @@ int main(int argc, char *argv[]) { } } +shutdown: close(fifo); unlink(fifoPath); |