aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix/ngx_posix_init.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2003-12-14 20:10:27 +0000
committerIgor Sysoev <igor@sysoev.ru>2003-12-14 20:10:27 +0000
commitdc867cd0fed793f86ce2b460f8c2ad069ddec1b5 (patch)
tree507db64a0a152c9ec99785a3ea887154ec4873b3 /src/os/unix/ngx_posix_init.c
parent2b58fbf045acee349c323de8f50501f94c41c04d (diff)
downloadnginx-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.c134
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;