diff options
Diffstat (limited to 'src/os/unix/ngx_posix_init.c')
-rw-r--r-- | src/os/unix/ngx_posix_init.c | 240 |
1 files changed, 17 insertions, 223 deletions
diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c index d0de5d5f6..c8b0548ce 100644 --- a/src/os/unix/ngx_posix_init.c +++ b/src/os/unix/ngx_posix_init.c @@ -6,6 +6,7 @@ #include <ngx_config.h> #include <ngx_core.h> +#include <nginx.h> ngx_int_t ngx_ncpu; @@ -17,8 +18,6 @@ ngx_uint_t ngx_tcp_nodelay_and_tcp_nopush; struct rlimit rlmt; -#if (NGX_POSIX_IO) - ngx_os_io_t ngx_os_io = { ngx_unix_recv, ngx_readv_chain, @@ -28,75 +27,17 @@ ngx_os_io_t ngx_os_io = { }; -ngx_int_t ngx_os_init(ngx_log_t *log) -{ - return ngx_posix_init(log); -} - - -void ngx_os_status(ngx_log_t *log) +ngx_int_t +ngx_os_init(ngx_log_t *log) { - ngx_posix_status(log); -} - + ngx_log_error(NGX_LOG_NOTICE, log, 0, NGINX_VER); +#if (NGX_HAVE_OS_SPECIFIC_INIT) + if (ngx_os_specific_init(log) != NGX_OK) { + return NGX_ERROR; + } #endif - -void ngx_signal_handler(int signo); - - -typedef struct { - int signo; - char *signame; - void (*handler)(int signo); -} ngx_signal_t; - - -ngx_signal_t signals[] = { - { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), - "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL), - ngx_signal_handler }, - - { ngx_signal_value(NGX_REOPEN_SIGNAL), - "SIG" ngx_value(NGX_REOPEN_SIGNAL), - ngx_signal_handler }, - - { ngx_signal_value(NGX_NOACCEPT_SIGNAL), - "SIG" ngx_value(NGX_NOACCEPT_SIGNAL), - ngx_signal_handler }, - - { ngx_signal_value(NGX_TERMINATE_SIGNAL), - "SIG" ngx_value(NGX_TERMINATE_SIGNAL), - ngx_signal_handler }, - - { ngx_signal_value(NGX_SHUTDOWN_SIGNAL), - "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL), - ngx_signal_handler }, - - { ngx_signal_value(NGX_CHANGEBIN_SIGNAL), - "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL), - ngx_signal_handler }, - - { SIGALRM, "SIGALRM", ngx_signal_handler }, - - { SIGINT, "SIGINT", ngx_signal_handler }, - - { SIGIO, "SIGIO", ngx_signal_handler }, - - { SIGCHLD, "SIGCHLD", ngx_signal_handler }, - - { SIGPIPE, "SIGPIPE, SIG_IGN", SIG_IGN }, - - { 0, NULL, NULL } -}; - - -ngx_int_t ngx_posix_init(ngx_log_t *log) -{ - ngx_signal_t *sig; - struct sigaction sa; - ngx_init_setproctitle(log); ngx_pagesize = getpagesize(); @@ -105,23 +46,12 @@ ngx_int_t ngx_posix_init(ngx_log_t *log) ngx_ncpu = 1; } - 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, "getrlimit(RLIMIT_NOFILE) failed)"); return NGX_ERROR; } - + ngx_max_sockets = rlmt.rlim_cur; #if (NGX_HAVE_INHERITED_NONBLOCK) @@ -134,157 +64,21 @@ ngx_int_t ngx_posix_init(ngx_log_t *log) } -void ngx_posix_status(ngx_log_t *log) +void +ngx_os_status(ngx_log_t *log) { +#if (NGX_HAVE_OS_SPECIFIC_INIT) + ngx_os_specific_status(log); +#endif + ngx_log_error(NGX_LOG_NOTICE, log, 0, "getrlimit(RLIMIT_NOFILE): %r:%r", rlmt.rlim_cur, rlmt.rlim_max); } -void ngx_signal_handler(int signo) -{ - char *action; - struct timeval tv; - ngx_int_t ignore; - ngx_err_t err; - ngx_signal_t *sig; - - ignore = 0; - - err = ngx_errno; - - for (sig = signals; sig->signo != 0; sig++) { - if (sig->signo == signo) { - break; - } - } - - ngx_gettimeofday(&tv); - ngx_time_update(tv.tv_sec); - - action = ""; - - switch (ngx_process) { - - case NGX_PROCESS_MASTER: - case NGX_PROCESS_SINGLE: - switch (signo) { - - case ngx_signal_value(NGX_SHUTDOWN_SIGNAL): - ngx_quit = 1; - action = ", shutting down"; - break; - - case ngx_signal_value(NGX_TERMINATE_SIGNAL): - case SIGINT: - ngx_terminate = 1; - action = ", exiting"; - break; - - case ngx_signal_value(NGX_NOACCEPT_SIGNAL): - ngx_noaccept = 1; - action = ", stop accepting connections"; - break; - - case ngx_signal_value(NGX_RECONFIGURE_SIGNAL): - ngx_reconfigure = 1; - action = ", reconfiguring"; - break; - - case ngx_signal_value(NGX_REOPEN_SIGNAL): - ngx_reopen = 1; - action = ", reopening logs"; - break; - - case ngx_signal_value(NGX_CHANGEBIN_SIGNAL): - if (getppid() > 1 || ngx_new_binary > 0) { - - /* - * Ignore the signal in the new binary if its parent is - * not the init process, i.e. the old binary's process - * is still running. Or ingore the signal in the old binary's - * process if the new binary's process is already running. - */ - - action = ", ignoring"; - ignore = 1; - break; - } - - ngx_change_binary = 1; - action = ", changing binary"; - break; - - case SIGALRM: - if (!ngx_terminate) { - ngx_timer = 1; - action = ", shutting down old worker processes"; - } - - break; - - case SIGIO: - ngx_sigio = 1; - break; - - case SIGCHLD: - ngx_reap = 1; - break; - } - - break; - - case NGX_PROCESS_WORKER: - switch (signo) { - - case ngx_signal_value(NGX_NOACCEPT_SIGNAL): - ngx_debug_quit = 1; - case ngx_signal_value(NGX_SHUTDOWN_SIGNAL): - ngx_quit = 1; - action = ", shutting down"; - break; - - case ngx_signal_value(NGX_TERMINATE_SIGNAL): - case SIGINT: - ngx_terminate = 1; - action = ", exiting"; - break; - - case ngx_signal_value(NGX_REOPEN_SIGNAL): - ngx_reopen = 1; - action = ", reopening logs"; - break; - - case ngx_signal_value(NGX_RECONFIGURE_SIGNAL): - case ngx_signal_value(NGX_CHANGEBIN_SIGNAL): - case SIGIO: - action = ", ignoring"; - break; - } - - break; - } - - ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0, - "signal %d (%s) received%s", signo, sig->signame, action); - - if (ignore) { - ngx_log_error(NGX_LOG_CRIT, ngx_cycle->log, 0, - "the changing binary signal is ignored: " - "you should shutdown or terminate " - "before either old or new binary's process"); - } - - if (signo == SIGCHLD) { - ngx_process_get_status(); - } - - ngx_set_errno(err); -} - - -ngx_int_t ngx_posix_post_conf_init(ngx_log_t *log) +ngx_int_t +ngx_posix_post_conf_init(ngx_log_t *log) { ngx_fd_t pp[2]; |