mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
 | |
| index 15680237..12a8c687 100644
 | |
| --- a/src/os/unix/ngx_process.c
 | |
| +++ b/src/os/unix/ngx_process.c
 | |
| @@ -362,8 +362,15 @@ ngx_signal_handler(int signo, siginfo_t *siginfo, void *ucontext)
 | |
|              break;
 | |
|  
 | |
|          case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
 | |
| -            ngx_reconfigure = 1;
 | |
| -            action = ", reconfiguring";
 | |
| +            if (ngx_process == NGX_PROCESS_SINGLE) {
 | |
| +                ngx_terminate = 1;
 | |
| +                action = ", exiting";
 | |
| +
 | |
| +            } else {
 | |
| +                ngx_reconfigure = 1;
 | |
| +                action = ", reconfiguring";
 | |
| +            }
 | |
| +
 | |
|              break;
 | |
|  
 | |
|          case ngx_signal_value(NGX_REOPEN_SIGNAL):
 | |
| diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c
 | |
| index 5817a2c2..f3d58e97 100644
 | |
| --- a/src/os/unix/ngx_process_cycle.c
 | |
| +++ b/src/os/unix/ngx_process_cycle.c
 | |
| @@ -305,11 +305,26 @@ ngx_single_process_cycle(ngx_cycle_t *cycle)
 | |
|      }
 | |
|  
 | |
|      for ( ;; ) {
 | |
| +        if (ngx_exiting) {
 | |
| +            if (ngx_event_no_timers_left() == NGX_OK) {
 | |
| +                ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
 | |
| +
 | |
| +                for (i = 0; cycle->modules[i]; i++) {
 | |
| +                    if (cycle->modules[i]->exit_process) {
 | |
| +                        cycle->modules[i]->exit_process(cycle);
 | |
| +                    }
 | |
| +                }
 | |
| +
 | |
| +                ngx_master_process_exit(cycle);
 | |
| +            }
 | |
| +        }
 | |
| +
 | |
|          ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
 | |
|  
 | |
|          ngx_process_events_and_timers(cycle);
 | |
|  
 | |
| -        if (ngx_terminate || ngx_quit) {
 | |
| +        if (ngx_terminate) {
 | |
| +            ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
 | |
|  
 | |
|              for (i = 0; cycle->modules[i]; i++) {
 | |
|                  if (cycle->modules[i]->exit_process) {
 | |
| @@ -320,6 +335,20 @@ ngx_single_process_cycle(ngx_cycle_t *cycle)
 | |
|              ngx_master_process_exit(cycle);
 | |
|          }
 | |
|  
 | |
| +        if (ngx_quit) {
 | |
| +            ngx_quit = 0;
 | |
| +            ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0,
 | |
| +                          "gracefully shutting down");
 | |
| +            ngx_setproctitle("process is shutting down");
 | |
| +
 | |
| +            if (!ngx_exiting) {
 | |
| +                ngx_exiting = 1;
 | |
| +                ngx_set_shutdown_timer(cycle);
 | |
| +                ngx_close_listening_sockets(cycle);
 | |
| +                ngx_close_idle_connections(cycle);
 | |
| +            }
 | |
| +        }
 | |
| +
 | |
|          if (ngx_reconfigure) {
 | |
|              ngx_reconfigure = 0;
 | |
|              ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "reconfiguring");
 |