/* static variables */
static AFPObj obj;
static sig_atomic_t got_chldsig;
-static pid_t afpd_pid, cnid_metad_pid;
+static pid_t afpd_pid = -1, cnid_metad_pid = -1;
static uint afpd_restarts, cnid_metad_restarts;
static struct event_base *base;
static void sigterm_cb(evutil_socket_t fd, short what, void *arg)
{
LOG(log_note, logtype_afpd, "Exiting on SIGTERM");
- kill(afpd_pid, SIGTERM);
- kill(cnid_metad_pid, SIGTERM);
+ if (afpd_pid != -1)
+ kill(afpd_pid, SIGTERM);
+ if (cnid_metad_pid != -1)
+ kill(cnid_metad_pid, SIGTERM);
server_unlock(_PATH_NETATALK_LOCK);
event_base_loopbreak(base);
}
static void sigquit_cb(evutil_socket_t fd, short what, void *arg)
{
LOG(log_note, logtype_afpd, "Exiting on SIGQUIT");
- kill(afpd_pid, SIGTERM);
- kill(cnid_metad_pid, SIGTERM);
+ if (afpd_pid != -1)
+ kill(afpd_pid, SIGTERM);
+ if (cnid_metad_pid != -1)
+ kill(cnid_metad_pid, SIGTERM);
server_unlock(_PATH_NETATALK_LOCK);
event_base_loopbreak(base);
}
int status, i;
pid_t pid;
- LOG(log_note, logtype_afpd, "Got SIGCHLD event");
+ LOG(log_debug, logtype_afpd, "Got SIGCHLD event");
while ((pid = waitpid(-1, &status, WNOHANG)) > 0) {
if (WIFEXITED(status)) {
if (pid == afpd_pid) {
sleep(1);
afpd_restarts++;
- LOG(log_note, logtype_afpd, "Restarting 'afpd' (restart: %u)", afpd_restarts);
+ LOG(log_note, logtype_afpd, "Restarting 'afpd' (restarts: %u)", afpd_restarts);
if ((afpd_pid = run_process(_PATH_AFPD, "-d", "-F", obj.options.configfile, NULL)) == -1) {
LOG(log_error, logtype_afpd, "Error starting 'afpd'");
}
} else if (pid = cnid_metad_pid) {
sleep(1);
cnid_metad_restarts++;
- LOG(log_note, logtype_afpd, "Restarting 'cnid_metad' (restart: %u)", cnid_metad_restarts);
+ LOG(log_note, logtype_afpd, "Restarting 'cnid_metad' (restarts: %u)", cnid_metad_restarts);
if ((cnid_metad_pid = run_process(_PATH_CNID_METAD, "-d", "-F", obj.options.configfile, NULL)) == -1) {
LOG(log_error, logtype_afpd, "Error starting 'cnid_metad'");
}
static void netatalk_exit(int ret)
{
+ if (afpd_pid != -1)
+ kill(afpd_pid, SIGTERM);
+ if (cnid_metad_pid != -1)
+ kill(cnid_metad_pid, SIGTERM);
server_unlock(_PATH_NETATALK_LOCK);
exit(ret);
}