summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorMax Romanov <max.romanov@nginx.com>2021-11-24 13:11:48 +0300
committerMax Romanov <max.romanov@nginx.com>2021-11-24 13:11:48 +0300
commit9e2e69dd58f01005e088b55466e67c0eafc2a414 (patch)
tree448e607f8696345f145e63d973d1bbe56385e0b3 /src
parent2c636a03f35c1807fa0744b53d19f364b131dc1d (diff)
downloadunit-9e2e69dd58f01005e088b55466e67c0eafc2a414.tar.gz
unit-9e2e69dd58f01005e088b55466e67c0eafc2a414.tar.bz2
Fixing alerts on router restart.
Splitting the process type connectivity matrix to 'keep ports' and 'send ports'; the 'keep ports' matrix is used to clean up unnecessary ports after forking a new process, and the 'send ports' matrix determines which process types expect to get created process ports. Unfortunately, the original single connectivity matrix no longer works because of an application stop delay caused by prototypes. Existing applications should not get the new router port at the moment.
Diffstat (limited to 'src')
-rw-r--r--src/nxt_port.c2
-rw-r--r--src/nxt_process.c15
-rw-r--r--src/nxt_process.h6
3 files changed, 16 insertions, 7 deletions
diff --git a/src/nxt_port.c b/src/nxt_port.c
index 88d645af..ed7050f3 100644
--- a/src/nxt_port.c
+++ b/src/nxt_port.c
@@ -217,7 +217,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);