From da370de9904e00f48e59e92f8bff29d5fe6a3ff2 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Mon, 1 Jun 2020 20:19:27 +0300 Subject: [PATCH] Fixed removing of listening UNIX sockets when "changing binary". When changing binary, sending a SIGTERM to the new binary's master process should not remove inherited UNIX sockets unless the old binary's master process has exited. --- src/core/nginx.c | 1 + src/core/ngx_connection.c | 3 ++- src/core/ngx_cycle.c | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/nginx.c b/src/core/nginx.c index 9fcb0eb23..f73e5598e 100644 --- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -492,6 +492,7 @@ ngx_add_inherited_sockets(ngx_cycle_t *cycle) ngx_memzero(ls, sizeof(ngx_listening_t)); ls->fd = (ngx_socket_t) s; + ls->inherited = 1; } } diff --git a/src/core/ngx_connection.c b/src/core/ngx_connection.c index 33682532a..88fefcea2 100644 --- a/src/core/ngx_connection.c +++ b/src/core/ngx_connection.c @@ -1070,7 +1070,8 @@ ngx_close_listening_sockets(ngx_cycle_t *cycle) if (ls[i].sockaddr->sa_family == AF_UNIX && ngx_process <= NGX_PROCESS_MASTER - && ngx_new_binary == 0) + && ngx_new_binary == 0 + && (!ls[i].inherited || ngx_getppid() != ngx_parent)) { u_char *name = ls[i].addr_text.data + sizeof("unix:") - 1; diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c index 95f4bdfab..764cf46ba 100644 --- a/src/core/ngx_cycle.c +++ b/src/core/ngx_cycle.c @@ -520,6 +520,7 @@ ngx_init_cycle(ngx_cycle_t *old_cycle) == NGX_OK) { nls[n].fd = ls[i].fd; + nls[n].inherited = ls[i].inherited; nls[n].previous = &ls[i]; ls[i].remain = 1;