Mercurial > hg > nginx
comparison src/os/unix/ngx_process_cycle.c @ 7663:7cbf6389194b
Fixed SIGQUIT not removing listening UNIX sockets (closes #753).
Listening UNIX sockets were not removed on graceful shutdown, preventing
the next runs. The fix is to replace the custom socket closing code in
ngx_master_process_cycle() by the ngx_close_listening_sockets() call.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Mon, 01 Jun 2020 22:31:23 +0300 |
parents | 7f28b61c92f0 |
children | 0215ec9aaa8a |
comparison
equal
deleted
inserted
replaced
7662:9c038f5e0464 | 7663:7cbf6389194b |
---|---|
75 { | 75 { |
76 char *title; | 76 char *title; |
77 u_char *p; | 77 u_char *p; |
78 size_t size; | 78 size_t size; |
79 ngx_int_t i; | 79 ngx_int_t i; |
80 ngx_uint_t n, sigio; | 80 ngx_uint_t sigio; |
81 sigset_t set; | 81 sigset_t set; |
82 struct itimerval itv; | 82 struct itimerval itv; |
83 ngx_uint_t live; | 83 ngx_uint_t live; |
84 ngx_msec_t delay; | 84 ngx_msec_t delay; |
85 ngx_listening_t *ls; | |
86 ngx_core_conf_t *ccf; | 85 ngx_core_conf_t *ccf; |
87 | 86 |
88 sigemptyset(&set); | 87 sigemptyset(&set); |
89 sigaddset(&set, SIGCHLD); | 88 sigaddset(&set, SIGCHLD); |
90 sigaddset(&set, SIGALRM); | 89 sigaddset(&set, SIGALRM); |
202 } | 201 } |
203 | 202 |
204 if (ngx_quit) { | 203 if (ngx_quit) { |
205 ngx_signal_worker_processes(cycle, | 204 ngx_signal_worker_processes(cycle, |
206 ngx_signal_value(NGX_SHUTDOWN_SIGNAL)); | 205 ngx_signal_value(NGX_SHUTDOWN_SIGNAL)); |
207 | 206 ngx_close_listening_sockets(cycle); |
208 ls = cycle->listening.elts; | |
209 for (n = 0; n < cycle->listening.nelts; n++) { | |
210 if (ngx_close_socket(ls[n].fd) == -1) { | |
211 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno, | |
212 ngx_close_socket_n " %V failed", | |
213 &ls[n].addr_text); | |
214 } | |
215 } | |
216 cycle->listening.nelts = 0; | |
217 | 207 |
218 continue; | 208 continue; |
219 } | 209 } |
220 | 210 |
221 if (ngx_reconfigure) { | 211 if (ngx_reconfigure) { |