Fix a hang introduced in the last commit. Don't close the pty slave
until after we have the controlling tty.
This commit is contained in:
@@ -408,8 +408,6 @@ exec_cmnd_pty(struct command_details *details, bool foreground, int errfd)
|
|||||||
if (io_fds[SFD_STDERR] != io_fds[SFD_SLAVE])
|
if (io_fds[SFD_STDERR] != io_fds[SFD_SLAVE])
|
||||||
close(io_fds[SFD_STDERR]);
|
close(io_fds[SFD_STDERR]);
|
||||||
}
|
}
|
||||||
if (io_fds[SFD_SLAVE] != -1)
|
|
||||||
close(io_fds[SFD_SLAVE]);
|
|
||||||
|
|
||||||
/* Wait for parent to grant us the tty if we are foreground. */
|
/* Wait for parent to grant us the tty if we are foreground. */
|
||||||
if (foreground && !ISSET(details->flags, CD_EXEC_BG)) {
|
if (foreground && !ISSET(details->flags, CD_EXEC_BG)) {
|
||||||
@@ -418,6 +416,10 @@ exec_cmnd_pty(struct command_details *details, bool foreground, int errfd)
|
|||||||
nanosleep(&ts, NULL);
|
nanosleep(&ts, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Done with the pty slave, don't leak it. */
|
||||||
|
if (io_fds[SFD_SLAVE] != -1)
|
||||||
|
close(io_fds[SFD_SLAVE]);
|
||||||
|
|
||||||
/* Execute command; only returns on error. */
|
/* Execute command; only returns on error. */
|
||||||
exec_cmnd(details, errfd);
|
exec_cmnd(details, errfd);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user