summaryrefslogtreecommitdiff
path: root/src/process.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2013-08-20 22:39:51 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2013-08-20 22:39:51 -0700
commit0d7c1e66ffad14f76fbd226d50113a61c738806c (patch)
treed88329f436b0cc3069c1dc118795efa2dd2f0e64 /src/process.c
parent6e50e9836a5e539cf2286fff44e9966e074f9c7b (diff)
downloademacs-0d7c1e66ffad14f76fbd226d50113a61c738806c.tar.gz
* process.c (allocate_pty) [PTY_OPEN]: Set fd's FD_CLOEXEC flag.
We can't portably rely on PTY_OPEN doing that, even if it calls posix_openpt with O_CLOEXEC.
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/process.c b/src/process.c
index c4dd87a6b48..349ec26534b 100644
--- a/src/process.c
+++ b/src/process.c
@@ -687,6 +687,15 @@ allocate_pty (char pty_name[PTY_NAME_SIZE])
if (fd >= 0)
{
+#ifdef PTY_OPEN
+ /* Set FD's close-on-exec flag. This is needed even if
+ PT_OPEN calls posix_openpt with O_CLOEXEC, since POSIX
+ doesn't require support for that combination.
+ Multithreaded platforms where posix_openpt ignores
+ O_CLOEXEC (or where PTY_OPEN doesn't call posix_openpt)
+ have a race condition between the PTY_OPEN and here. */
+ fcntl (fd, F_SETFD, FD_CLOEXEC);
+#endif
/* check to make certain that both sides are available
this avoids a nasty yet stupid bug in rlogins */
#ifdef PTY_TTY_NAME_SPRINTF