[core] consistent behavior w/ and w/o SA_SIGINFO
and consistent open of server.pid-file
This commit is contained in:
parent
7bda136e5f
commit
42ab331dc9
23
src/server.c
23
src/server.c
|
@ -154,6 +154,12 @@ static void sigaction_handler(int sig, siginfo_t *si, void *context) {
|
|||
static void signal_handler(int sig) {
|
||||
switch (sig) {
|
||||
case SIGTERM: srv_shutdown = 1; break;
|
||||
case SIGUSR1:
|
||||
if (!graceful_shutdown) {
|
||||
graceful_restart = 1;
|
||||
graceful_shutdown = 1;
|
||||
}
|
||||
break;
|
||||
case SIGINT:
|
||||
if (graceful_shutdown) {
|
||||
if (2 == graceful_restart)
|
||||
|
@ -165,7 +171,20 @@ static void signal_handler(int sig) {
|
|||
}
|
||||
break;
|
||||
case SIGALRM: handle_sig_alarm = 1; break;
|
||||
case SIGHUP: handle_sig_hup = 1; break;
|
||||
case SIGHUP:
|
||||
/**
|
||||
* we send the SIGHUP to all procs in the process-group
|
||||
* this includes ourself
|
||||
*
|
||||
* make sure we only send it once and don't create a
|
||||
* infinite loop
|
||||
*/
|
||||
if (!forwarded_sig_hup) {
|
||||
handle_sig_hup = 1;
|
||||
} else {
|
||||
forwarded_sig_hup = 0;
|
||||
}
|
||||
break;
|
||||
case SIGCHLD: break;
|
||||
}
|
||||
}
|
||||
|
@ -1239,7 +1258,7 @@ static int server_main (server * const srv, int argc, char **argv) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (-1 == (pid_fd = open(srv->srvconf.pid_file->ptr, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))) {
|
||||
if (-1 == (pid_fd = fdevent_open_cloexec(srv->srvconf.pid_file->ptr, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH))) {
|
||||
log_error_write(srv, __FILE__, __LINE__, "sbs",
|
||||
"opening pid-file failed:", srv->srvconf.pid_file, strerror(errno));
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue