summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_main_process.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nxt_main_process.c')
-rw-r--r--src/nxt_main_process.c73
1 files changed, 38 insertions, 35 deletions
diff --git a/src/nxt_main_process.c b/src/nxt_main_process.c
index b9e7ab96..85685fbc 100644
--- a/src/nxt_main_process.c
+++ b/src/nxt_main_process.c
@@ -1014,52 +1014,50 @@ nxt_main_cleanup_worker_process(nxt_task_t *task, nxt_pid_t pid)
nxt_process_close_ports(task, process);
- if (!nxt_exiting) {
- nxt_runtime_process_each(rt, process) {
-
- if (process->pid == nxt_pid
- || process->pid == pid
- || nxt_queue_is_empty(&process->ports))
- {
- continue;
- }
-
- port = nxt_process_port_first(process);
+ if (nxt_exiting) {
+ if (rt->nprocesses <= 2) {
+ nxt_runtime_quit(task, 0);
+ }
- if (nxt_proc_remove_notify_matrix[ptype][port->type] == 0) {
- continue;
- }
+ return;
+ }
- buf = nxt_buf_mem_ts_alloc(task, task->thread->engine->mem_pool,
- sizeof(pid));
- if (nxt_slow_path(buf == NULL)) {
- continue;
- }
+ nxt_runtime_process_each(rt, process) {
- buf->mem.free = nxt_cpymem(buf->mem.free, &pid, sizeof(pid));
+ if (process->pid == nxt_pid
+ || process->pid == pid
+ || nxt_queue_is_empty(&process->ports))
+ {
+ continue;
+ }
- nxt_port_socket_write(task, port, NXT_PORT_MSG_REMOVE_PID,
- -1, init->stream, 0, buf);
- } nxt_runtime_process_loop;
- }
+ port = nxt_process_port_first(process);
- if (nxt_exiting) {
+ if (nxt_proc_remove_notify_matrix[ptype][port->type] == 0) {
+ continue;
+ }
- if (rt->nprocesses == 2) {
- nxt_runtime_quit(task, 0);
+ buf = nxt_buf_mem_ts_alloc(task, task->thread->engine->mem_pool,
+ sizeof(pid));
+ if (nxt_slow_path(buf == NULL)) {
+ continue;
}
- } else if (init != NULL) {
- if (init->restart != NULL) {
- if (init->type == NXT_PROCESS_ROUTER) {
- nxt_main_stop_worker_processes(task, rt);
- }
+ buf->mem.free = nxt_cpymem(buf->mem.free, &pid, sizeof(pid));
- init->restart(task, rt, init);
+ nxt_port_socket_write(task, port, NXT_PORT_MSG_REMOVE_PID,
+ -1, init->stream, 0, buf);
+ } nxt_runtime_process_loop;
- } else {
- nxt_free(init);
+ if (init->restart != NULL) {
+ if (init->type == NXT_PROCESS_ROUTER) {
+ nxt_main_stop_worker_processes(task, rt);
}
+
+ init->restart(task, rt, init);
+
+ } else {
+ nxt_free(init);
}
}
}
@@ -1313,6 +1311,11 @@ nxt_main_port_modules_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg)
return;
}
+ if (nxt_exiting) {
+ nxt_debug(task, "ignoring discovered modules, exiting");
+ return;
+ }
+
port = nxt_runtime_port_find(task->thread->runtime, msg->port_msg.pid,
msg->port_msg.reply_port);