nxt_process_create() changed to add process to runtime before callbacks.

This commit is contained in:
Max Romanov
2017-06-23 19:19:41 +03:00
parent e5fe254e1e
commit ac43bfcc72
3 changed files with 21 additions and 16 deletions

View File

@@ -244,7 +244,7 @@ nxt_master_create_worker_process(nxt_task_t *task, nxt_runtime_t *rt,
port->engine = 0; port->engine = 0;
port->type = init->type; port->type = init->type;
pid = nxt_process_create(task, init); pid = nxt_process_create(task, process);
switch (pid) { switch (pid) {
@@ -253,19 +253,10 @@ nxt_master_create_worker_process(nxt_task_t *task, nxt_runtime_t *rt,
case 0: case 0:
/* A worker process, return to the event engine work queue loop. */ /* A worker process, return to the event engine work queue loop. */
process->pid = nxt_pid;
port->pid = nxt_pid;
nxt_runtime_process_add(rt, process);
return NXT_AGAIN; return NXT_AGAIN;
default: default:
/* The master process created a new process. */ /* The master process created a new process. */
process->pid = pid;
port->pid = pid;
nxt_runtime_process_add(rt, process);
nxt_port_read_close(port); nxt_port_read_close(port);
nxt_port_write_enable(task, port); nxt_port_write_enable(task, port);

View File

@@ -20,9 +20,12 @@ nxt_pid_t nxt_ppid;
nxt_pid_t nxt_pid_t
nxt_process_create(nxt_task_t *task, nxt_process_init_t *process) nxt_process_create(nxt_task_t *task, nxt_process_t *process)
{ {
nxt_pid_t pid; nxt_pid_t pid;
nxt_runtime_t *rt;
rt = task->thread->runtime;
pid = fork(); pid = fork();
@@ -30,7 +33,7 @@ nxt_process_create(nxt_task_t *task, nxt_process_init_t *process)
case -1: case -1:
nxt_log(task, NXT_LOG_CRIT, "fork() failed while creating \"%s\" %E", nxt_log(task, NXT_LOG_CRIT, "fork() failed while creating \"%s\" %E",
process->name, nxt_errno); process->init->name, nxt_errno);
break; break;
case 0: case 0:
@@ -40,12 +43,23 @@ nxt_process_create(nxt_task_t *task, nxt_process_init_t *process)
/* Clean inherited cached thread tid. */ /* Clean inherited cached thread tid. */
task->thread->tid = 0; task->thread->tid = 0;
nxt_process_start(task, process); process->pid = nxt_pid;
process->init->port->pid = nxt_pid;
nxt_runtime_process_add(rt, process);
nxt_process_start(task, process->init);
break; break;
default: default:
/* A parent. */ /* A parent. */
nxt_debug(task, "fork(\"%s\"): %PI", process->name, pid); nxt_debug(task, "fork(\"%s\"): %PI", process->init->name, pid);
process->pid = pid;
process->init->port->pid = pid;
nxt_runtime_process_add(rt, process);
break; break;
} }

View File

@@ -62,7 +62,7 @@ typedef struct {
NXT_EXPORT nxt_pid_t nxt_process_create(nxt_task_t *task, NXT_EXPORT nxt_pid_t nxt_process_create(nxt_task_t *task,
nxt_process_init_t *process); nxt_process_t *process);
NXT_EXPORT nxt_pid_t nxt_process_execute(nxt_task_t *task, char *name, NXT_EXPORT nxt_pid_t nxt_process_execute(nxt_task_t *task, char *name,
char **argv, char **envp); char **argv, char **envp);
NXT_EXPORT nxt_int_t nxt_process_daemon(nxt_task_t *task); NXT_EXPORT nxt_int_t nxt_process_daemon(nxt_task_t *task);