summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorAndrei Belov <defan@nginx.com>2021-12-02 18:42:23 +0300
committerAndrei Belov <defan@nginx.com>2021-12-02 18:42:23 +0300
commit7634ab0f21c712e79c5d09e5817f866ff71d4f49 (patch)
tree1c4b20be29a9372858088c9faa3f02e7f584402f /src
parent5dfde9717d9ef611072defdd211089efa920c728 (diff)
parent85908c09f9b7d8d0bd797427d984e2697ece8267 (diff)
downloadunit-7634ab0f21c712e79c5d09e5817f866ff71d4f49.tar.gz
unit-7634ab0f21c712e79c5d09e5817f866ff71d4f49.tar.bz2
Merged with the 1.26 branch.1.26.1-1
Diffstat (limited to 'src')
-rw-r--r--src/nxt_application.c2
-rw-r--r--src/nxt_main.c2
-rw-r--r--src/nxt_main_process.c4
-rw-r--r--src/nxt_php_sapi.c7
-rw-r--r--src/nxt_port.c2
-rw-r--r--src/nxt_process.c15
-rw-r--r--src/nxt_process.h6
-rw-r--r--src/nxt_router.c30
-rw-r--r--src/nxt_unit.c6
9 files changed, 56 insertions, 18 deletions
diff --git a/src/nxt_application.c b/src/nxt_application.c
index 589821fb..82385ec4 100644
--- a/src/nxt_application.c
+++ b/src/nxt_application.c
@@ -1147,6 +1147,8 @@ nxt_proto_process_remove(nxt_task_t *task, nxt_pid_t pid)
process = lhq.value;
nxt_queue_remove(&process->link);
+ process->link.next = NULL;
+
break;
default:
diff --git a/src/nxt_main.c b/src/nxt_main.c
index 03403991..26bee873 100644
--- a/src/nxt_main.c
+++ b/src/nxt_main.c
@@ -30,7 +30,7 @@ main(int argc, char **argv)
return 1;
}
- nxt_log(&nxt_main_task, NXT_LOG_INFO, "unit started");
+ nxt_log(&nxt_main_task, NXT_LOG_INFO, "unit " NXT_VERSION " started");
nxt_event_engine_start(nxt_main_task.thread->engine);
diff --git a/src/nxt_main_process.c b/src/nxt_main_process.c
index a5a20d3d..61521854 100644
--- a/src/nxt_main_process.c
+++ b/src/nxt_main_process.c
@@ -950,9 +950,11 @@ nxt_main_process_sigchld_handler(nxt_task_t *task, void *obj, void *data)
if (rt->nprocesses <= 1) {
nxt_runtime_quit(task, 0);
+
+ return;
}
- return;
+ continue;
}
nxt_port_remove_notify_others(task, process);
diff --git a/src/nxt_php_sapi.c b/src/nxt_php_sapi.c
index ea5f5581..68ef07eb 100644
--- a/src/nxt_php_sapi.c
+++ b/src/nxt_php_sapi.c
@@ -204,7 +204,10 @@ ZEND_NAMED_FUNCTION(nxt_php_chdir)
nxt_php_run_ctx_t *ctx;
ctx = SG(server_context);
- ctx->chdir = 1;
+
+ if (nxt_fast_path(ctx != NULL)) {
+ ctx->chdir = 1;
+ }
nxt_php_chdir_handler(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
@@ -225,7 +228,7 @@ PHP_FUNCTION(fastcgi_finish_request)
ctx = SG(server_context);
- if (nxt_slow_path(ctx->req == NULL)) {
+ if (nxt_slow_path(ctx == NULL || ctx->req == NULL)) {
RETURN_FALSE;
}
diff --git a/src/nxt_port.c b/src/nxt_port.c
index 1e8fa28a..a5b64695 100644
--- a/src/nxt_port.c
+++ b/src/nxt_port.c
@@ -216,7 +216,7 @@ nxt_port_send_new_port(nxt_task_t *task, nxt_runtime_t *rt,
port = nxt_process_port_first(process);
- if (nxt_proc_conn_matrix[port->type][new_port->type]) {
+ if (nxt_proc_send_matrix[port->type][new_port->type]) {
(void) nxt_port_send_port(task, port, new_port, stream);
}
diff --git a/src/nxt_process.c b/src/nxt_process.c
index fca197eb..82e66a99 100644
--- a/src/nxt_process.c
+++ b/src/nxt_process.c
@@ -58,7 +58,7 @@ nxt_uid_t nxt_euid;
/* A cached process effective gid */
nxt_gid_t nxt_egid;
-nxt_bool_t nxt_proc_conn_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX] = {
+uint8_t nxt_proc_keep_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX] = {
{ 1, 1, 1, 1, 1, 1 },
{ 1, 0, 0, 0, 0, 0 },
{ 1, 0, 0, 1, 0, 0 },
@@ -67,7 +67,16 @@ nxt_bool_t nxt_proc_conn_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX] = {
{ 1, 0, 0, 1, 0, 0 },
};
-nxt_bool_t nxt_proc_remove_notify_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX] = {
+uint8_t nxt_proc_send_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX] = {
+ { 1, 1, 1, 1, 1, 1 },
+ { 1, 0, 0, 0, 0, 0 },
+ { 1, 0, 0, 1, 0, 0 },
+ { 1, 0, 1, 1, 1, 1 },
+ { 1, 0, 0, 0, 0, 0 },
+ { 1, 0, 0, 0, 0, 0 },
+};
+
+uint8_t nxt_proc_remove_notify_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX] = {
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 0 },
@@ -265,7 +274,7 @@ nxt_process_child_fixup(nxt_task_t *task, nxt_process_t *process)
/* Remove not ready processes. */
nxt_runtime_process_each(rt, p) {
- if (nxt_proc_conn_matrix[ptype][nxt_process_type(p)] == 0
+ if (nxt_proc_keep_matrix[ptype][nxt_process_type(p)] == 0
&& p->pid != nxt_ppid) /* Always keep parent's port. */
{
nxt_debug(task, "remove not required process %PI", p->pid);
diff --git a/src/nxt_process.h b/src/nxt_process.h
index c92eebd8..694f457e 100644
--- a/src/nxt_process.h
+++ b/src/nxt_process.h
@@ -151,9 +151,9 @@ typedef struct {
} nxt_process_init_t;
-extern nxt_bool_t nxt_proc_conn_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX];
-extern nxt_bool_t
- nxt_proc_remove_notify_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX];
+extern uint8_t nxt_proc_keep_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX];
+extern uint8_t nxt_proc_send_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX];
+extern uint8_t nxt_proc_remove_notify_matrix[NXT_PROCESS_MAX][NXT_PROCESS_MAX];
NXT_EXPORT nxt_pid_t nxt_process_execute(nxt_task_t *task, char *name,
char **argv, char **envp);
diff --git a/src/nxt_router.c b/src/nxt_router.c
index 7623ccbb..85556a72 100644
--- a/src/nxt_router.c
+++ b/src/nxt_router.c
@@ -210,6 +210,8 @@ static void nxt_router_access_log_ready(nxt_task_t *task,
nxt_port_recv_msg_t *msg, void *data);
static void nxt_router_access_log_error(nxt_task_t *task,
nxt_port_recv_msg_t *msg, void *data);
+static void nxt_router_access_log_use(nxt_thread_spinlock_t *lock,
+ nxt_router_access_log_t *access_log);
static void nxt_router_access_log_release(nxt_task_t *task,
nxt_thread_spinlock_t *lock, nxt_router_access_log_t *access_log);
static void nxt_router_access_log_reopen_completion(nxt_task_t *task, void *obj,
@@ -1149,7 +1151,13 @@ nxt_router_conf_apply(nxt_task_t *task, void *obj, void *data)
nxt_queue_add(&router->sockets, &updating_sockets);
nxt_queue_add(&router->sockets, &creating_sockets);
- router->access_log = rtcf->access_log;
+ if (router->access_log != rtcf->access_log) {
+ nxt_router_access_log_use(&router->lock, rtcf->access_log);
+
+ nxt_router_access_log_release(task, &router->lock, router->access_log);
+
+ router->access_log = rtcf->access_log;
+ }
nxt_router_conf_ready(task, tmcf);
@@ -1971,9 +1979,7 @@ nxt_router_conf_create(nxt_task_t *task, nxt_router_temp_conf_t *tmcf,
access_log = router->access_log;
if (access_log != NULL && nxt_strstr_eq(&path, &access_log->path)) {
- nxt_thread_spin_lock(&router->lock);
- access_log->count++;
- nxt_thread_spin_unlock(&router->lock);
+ nxt_router_access_log_use(&router->lock, access_log);
} else {
access_log = nxt_malloc(sizeof(nxt_router_access_log_t)
@@ -3923,6 +3929,22 @@ nxt_router_access_log_error(nxt_task_t *task, nxt_port_recv_msg_t *msg,
static void
+nxt_router_access_log_use(nxt_thread_spinlock_t *lock,
+ nxt_router_access_log_t *access_log)
+{
+ if (access_log == NULL) {
+ return;
+ }
+
+ nxt_thread_spin_lock(lock);
+
+ access_log->count++;
+
+ nxt_thread_spin_unlock(lock);
+}
+
+
+static void
nxt_router_access_log_release(nxt_task_t *task, nxt_thread_spinlock_t *lock,
nxt_router_access_log_t *access_log)
{
diff --git a/src/nxt_unit.c b/src/nxt_unit.c
index 06ad1636..135c06ed 100644
--- a/src/nxt_unit.c
+++ b/src/nxt_unit.c
@@ -937,9 +937,9 @@ nxt_unit_process_msg(nxt_unit_ctx_t *ctx, nxt_unit_read_buf_t *rbuf,
lib = nxt_container_of(ctx->unit, nxt_unit_impl_t, unit);
+ recv_msg.incoming_buf = NULL;
recv_msg.fd[0] = -1;
recv_msg.fd[1] = -1;
- port_msg = (nxt_port_msg_t *) rbuf->buf;
rc = nxt_socket_msg_oob_get_fds(&rbuf->oob, recv_msg.fd);
if (nxt_slow_path(rc != NXT_OK)) {
@@ -948,8 +948,6 @@ nxt_unit_process_msg(nxt_unit_ctx_t *ctx, nxt_unit_read_buf_t *rbuf,
goto done;
}
- recv_msg.incoming_buf = NULL;
-
if (nxt_slow_path(rbuf->size < (ssize_t) sizeof(nxt_port_msg_t))) {
if (nxt_slow_path(rbuf->size == 0)) {
nxt_unit_debug(ctx, "read port closed");
@@ -965,6 +963,8 @@ nxt_unit_process_msg(nxt_unit_ctx_t *ctx, nxt_unit_read_buf_t *rbuf,
goto done;
}
+ port_msg = (nxt_port_msg_t *) rbuf->buf;
+
nxt_unit_debug(ctx, "#%"PRIu32": process message %d fd[0] %d fd[1] %d",
port_msg->stream, (int) port_msg->type,
recv_msg.fd[0], recv_msg.fd[1]);