diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-12-14 20:10:27 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-12-14 20:10:27 +0000 |
commit | dc867cd0fed793f86ce2b460f8c2ad069ddec1b5 (patch) | |
tree | 507db64a0a152c9ec99785a3ea887154ec4873b3 /src/os/unix/ngx_posix_init.c | |
parent | 2b58fbf045acee349c323de8f50501f94c41c04d (diff) | |
download | nginx-dc867cd0fed793f86ce2b460f8c2ad069ddec1b5.tar.gz nginx-dc867cd0fed793f86ce2b460f8c2ad069ddec1b5.zip |
nginx-0.0.1-2003-12-14-23:10:27 import
Diffstat (limited to 'src/os/unix/ngx_posix_init.c')
-rw-r--r-- | src/os/unix/ngx_posix_init.c | 134 |
1 files changed, 101 insertions, 33 deletions
diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c index 7550af0d8..9ebc3d17c 100644 --- a/src/os/unix/ngx_posix_init.c +++ b/src/os/unix/ngx_posix_init.c @@ -7,47 +7,65 @@ int ngx_max_sockets; int ngx_inherited_nonblocking; +void ngx_signal_handler(int signo); +void ngx_exit_signal_handler(int signo); void ngx_restart_signal_handler(int signo); void ngx_rotate_signal_handler(int signo); -int ngx_posix_init(ngx_log_t *log) -{ - struct rlimit rlmt; - struct sigaction sa; - - ngx_memzero(&sa, sizeof(struct sigaction)); - sa.sa_handler = SIG_IGN; - sigemptyset(&sa.sa_mask); - if (sigaction(SIGPIPE, &sa, NULL) == -1) { - ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, - "sigaction(SIGPIPE, SIG_IGN) failed"); - return NGX_ERROR; - } +typedef struct { + int signo; + char *signame; + char *action; + void (*handler)(int signo); +} ngx_signal_t; - ngx_memzero(&sa, sizeof(struct sigaction)); - sa.sa_handler = ngx_sigchld_handler; - sigemptyset(&sa.sa_mask); - if (sigaction(SIGCHLD, &sa, NULL) == -1) { - ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, - "sigaction(SIGCHLD) failed"); - return NGX_ERROR; - } - sa.sa_handler = ngx_restart_signal_handler; - if (sigaction(ngx_signal_value(NGX_RESTART_SIGNAL), &sa, NULL) == -1) { - ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, - "sigaction(SIG" ngx_value(NGX_RESTART_SIGNAL) ") failed"); - return NGX_ERROR; - } +ngx_signal_t signals[] = { + { ngx_signal_value(NGX_RESTART_SIGNAL), + "SIG" ngx_value(NGX_RESTART_SIGNAL), + "restarting", + ngx_signal_handler }, - sa.sa_handler = ngx_rotate_signal_handler; - if (sigaction(ngx_signal_value(NGX_ROTATE_SIGNAL), &sa, NULL) == -1) { - ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, - "sigaction(SIG" ngx_value(NGX_ROTATE_SIGNAL) ") failed"); - return NGX_ERROR; - } + { ngx_signal_value(NGX_ROTATE_SIGNAL), + "SIG" ngx_value(NGX_ROTATE_SIGNAL), + "reopen logs", + ngx_signal_handler }, + { ngx_signal_value(NGX_INTERRUPT_SIGNAL), + "SIG" ngx_value(NGX_INTERRUPT_SIGNAL), + "exiting", + ngx_signal_handler }, + + { ngx_signal_value(NGX_SHUTDOWN_SIGNAL), + "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL), + "shutdowning", + ngx_signal_handler }, + + { SIGCHLD, "SIGCHLD", NULL, ngx_sigchld_handler }, + + { SIGPIPE, "SIGPIPE, SIG_IGN", NULL, SIG_IGN }, + + { 0, NULL, NULL, NULL } +}; + + +int ngx_posix_init(ngx_log_t *log) +{ + ngx_signal_t *sig; + struct rlimit rlmt; + struct sigaction sa; + + for (sig = signals; sig->signo != 0; sig++) { + ngx_memzero(&sa, sizeof(struct sigaction)); + sa.sa_handler = sig->handler; + sigemptyset(&sa.sa_mask); + if (sigaction(sig->signo, &sa, NULL) == -1) { + ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, + "sigaction(%s) failed", sig->signame); + return NGX_ERROR; + } + } if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { ngx_log_error(NGX_LOG_ALERT, log, errno, @@ -71,6 +89,56 @@ int ngx_posix_init(ngx_log_t *log) } +void ngx_signal_handler(int signo) +{ + char *name; + ngx_signal_t *sig; + + for (sig = signals; sig->signo != 0; sig++) { + if (sig->signo == signo) { + break; + } + } + + /* STUB */ + name = strsignal(signo); + ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0, + "signal #%d (%s: %s) received, %s", + signo, sig->signame, name, sig->action); + + switch (signo) { + + /* STUB */ + case SIGQUIT: + case SIGABRT: + + case ngx_signal_value(NGX_SHUTDOWN_SIGNAL): + case ngx_signal_value(NGX_INTERRUPT_SIGNAL): + done = 1; + break; + + case ngx_signal_value(NGX_RESTART_SIGNAL): + restart = 1; + break; + + case ngx_signal_value(NGX_ROTATE_SIGNAL): + rotate = 1; + break; + } +} + + +void ngx_exit_signal_handler(int signo) +{ + char *s; + + s = strsignal(signo); + ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0, + "%s signal received, exiting", s); + done = 1; +} + + void ngx_restart_signal_handler(int signo) { restart = 1; |