Mercurial > hg > nginx
diff src/os/unix/ngx_process.c @ 221:401154e21826
nginx-0.0.1-2004-01-08-20:08:10 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 08 Jan 2004 17:08:10 +0000 |
parents | 4f81b931e9ff |
children | 99df0edb63ed |
line wrap: on
line diff
--- a/src/os/unix/ngx_process.c +++ b/src/os/unix/ngx_process.c @@ -8,14 +8,6 @@ static void ngx_exec_proc(ngx_cycle_t *c ngx_uint_t ngx_last_process; ngx_process_t ngx_processes[NGX_MAX_PROCESSES]; -sigset_t ngx_sigmask; - - -void ngx_wait_events() -{ - sigsuspend(&ngx_sigmask); -} - ngx_int_t ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data, @@ -122,17 +114,8 @@ static void ngx_exec_proc(ngx_cycle_t *c void ngx_signal_processes(ngx_cycle_t *cycle, ngx_int_t signal) { - sigset_t set, oset; ngx_uint_t i; - sigemptyset(&set); - sigaddset(&set, SIGCHLD); - if (sigprocmask(SIG_BLOCK, &set, &oset) == -1) { - ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, - "sigprocmask() failed while signaling processes"); - return; - } - for (i = 0; i < ngx_last_process; i++) { if (ngx_processes[i].detached) { @@ -160,61 +143,32 @@ void ngx_signal_processes(ngx_cycle_t *c ngx_processes[i].exiting = 1; } } - - if (sigprocmask(SIG_SETMASK, &oset, &set) == -1) { - ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, - "sigprocmask() failed while signaling processes"); - } } void ngx_respawn_processes(ngx_cycle_t *cycle) { - sigset_t set, oset; ngx_uint_t i; - sigemptyset(&set); - sigaddset(&set, SIGCHLD); - if (sigprocmask(SIG_BLOCK, &set, &oset) == -1) { - ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, - "sigprocmask() failed while respawning processes"); - return; - } - - /* - * to avoid a race condition we can check and set value of ngx_respawn - * only in signal handler or while SIGCHLD is blocked - */ - - if (ngx_respawn) { - - for (i = 0; i < ngx_last_process; i++) { - if (!ngx_processes[i].exited) { - continue; - } - - if (!ngx_processes[i].respawn) { - if (i != --ngx_last_process) { - ngx_processes[i--] = ngx_processes[ngx_last_process]; - } - continue; - } - - if (ngx_spawn_process(cycle, - ngx_processes[i].proc, ngx_processes[i].data, - ngx_processes[i].name, i) == NGX_ERROR) - { - ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, - "can not respawn %s", ngx_processes[i].name); - } + for (i = 0; i < ngx_last_process; i++) { + if (!ngx_processes[i].exited) { + continue; } - ngx_respawn = 0; - } + if (!ngx_processes[i].respawn) { + if (i != --ngx_last_process) { + ngx_processes[i--] = ngx_processes[ngx_last_process]; + } + continue; + } - if (sigprocmask(SIG_SETMASK, &oset, &set) == -1) { - ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, - "sigprocmask() failed while respawning processes"); + if (ngx_spawn_process(cycle, + ngx_processes[i].proc, ngx_processes[i].data, + ngx_processes[i].name, i) == NGX_ERROR) + { + ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, + "can not respawn %s", ngx_processes[i].name); + } } } @@ -261,10 +215,6 @@ void ngx_process_get_status() if (!ngx_processes[i].exiting) { ngx_processes[i].exited = 1; - - if (ngx_processes[i].respawn) { - ngx_respawn = 1; - } } process = ngx_processes[i].name;