From: Mike Fabian <[email protected]> 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: Egbert Eich <[email protected]> --- luit.c | 7 ++++++- 1 files changed, 6 insertions(+), 1 deletions(-) diff --git a/luit.c b/luit.c index 0ece7b6..5cb3b8f 100644 --- a/luit.c +++ b/luit.c @@ -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); -- 1.7.7 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
