Moving file descriptor blocking to libunit.
The default libunit behavior relies on blocking the recv() call for port file descriptors, which an application may override if needed. For external applications, port file descriptors were toggled to blocking mode before the exec() call. If the exec() call failed, descriptor remained blocked, so the process hanged while trying to read from it. This patch moves file descriptor mode switch inside libunit.
This commit is contained in:
@@ -1290,8 +1290,6 @@ nxt_unit_default_init(nxt_task_t *task, nxt_unit_init_t *init)
|
||||
init->ready_port.in_fd = -1;
|
||||
init->ready_port.out_fd = main_port->pair[1];
|
||||
|
||||
nxt_fd_blocking(task, main_port->pair[1]);
|
||||
|
||||
init->ready_stream = my_port->process->stream;
|
||||
|
||||
init->router_port.id.pid = router_port->pid;
|
||||
@@ -1299,15 +1297,11 @@ nxt_unit_default_init(nxt_task_t *task, nxt_unit_init_t *init)
|
||||
init->router_port.in_fd = -1;
|
||||
init->router_port.out_fd = router_port->pair[1];
|
||||
|
||||
nxt_fd_blocking(task, router_port->pair[1]);
|
||||
|
||||
init->read_port.id.pid = my_port->pid;
|
||||
init->read_port.id.id = my_port->id;
|
||||
init->read_port.in_fd = my_port->pair[0];
|
||||
init->read_port.out_fd = -1;
|
||||
|
||||
nxt_fd_blocking(task, my_port->pair[0]);
|
||||
|
||||
init->log_fd = 2;
|
||||
|
||||
return NXT_OK;
|
||||
|
||||
Reference in New Issue
Block a user