Commit 47395914 authored by Mike Fabian's avatar Mike Fabian Committed by Egbert Eich

Set up terminal before fork.

After the fork it is undefined wether parent or child runs
first. So there can be a race: if the child runs before the
terminal of the parent is set up correctly luit may hang.
This patch sets up the terminal before forking and undoes
the settings in the child.
Signed-off-by: Mike Fabian's avatarMike FABIAN <mfabian@redhat.com>
Signed-off-by: default avatarEgbert Eich <eich@freedesktop.org>
parent 9baee90b
......@@ -577,6 +577,8 @@ condom(int argc, char **argv)
IGNORE_RC(pipe(c2p_waitpipe));
}
setup_io(pty);
pid = fork();
if (pid < 0) {
perror("Couldn't fork");
......@@ -584,6 +586,10 @@ condom(int argc, char **argv)
}
if (pid == 0) {
#ifdef SIGWINCH
installHandler(SIGWINCH, SIG_DFL);
#endif
installHandler(SIGCHLD, SIG_DFL);
close(pty);
if (pipe_option) {
close_waitpipe(1);
......@@ -661,7 +667,6 @@ parent(int pid GCC_UNUSED, int pty)
if (verbose) {
reportIso2022(outputState);
}
setup_io(pty);
if (pipe_option) {
write_waitpipe(p2c_waitpipe);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment