changeset 11925:fe6675d67a10 v8.0.0842

patch 8.0.0842: using slave pty after closing it commit https://github.com/vim/vim/commit/223896d3e9d4d511fc38fd9ee27ba16318733df6 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Aug 2 22:33:28 2017 +0200 patch 8.0.0842: using slave pty after closing it Problem: Using slave pty after closing it. Solution: Do the ioctl() before dup'ing it.
author Christian Brabandt <cb@256bit.org>
date Wed, 02 Aug 2017 22:45:04 +0200
parents 6d2c06fb42dd
children 9fa7cd71d9c8
files src/os_unix.c src/version.c
diffstat 2 files changed, 15 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -5316,6 +5316,17 @@ mch_job_start(char **argv, job_T *job, j
 	if (use_null_for_in || use_null_for_out || use_null_for_err)
 	    null_fd = open("/dev/null", O_RDWR | O_EXTRA, 0);
 
+	if (pty_slave_fd >= 0)
+	{
+	    /* push stream discipline modules */
+	    SetupSlavePTY(pty_slave_fd);
+#  ifdef TIOCSCTTY
+	    /* Try to become controlling tty (probably doesn't work,
+	     * unless run by root) */
+	    ioctl(pty_slave_fd, TIOCSCTTY, (char *)NULL);
+#  endif
+	}
+
 	/* set up stdin for the child */
 	close(0);
 	if (use_null_for_in && null_fd >= 0)
@@ -5362,24 +5373,13 @@ mch_job_start(char **argv, job_T *job, j
 	    close(fd_err[1]);
 	if (pty_master_fd >= 0)
 	{
-	    close(pty_master_fd); /* not used */
-	    close(pty_slave_fd); /* duped above */
+	    close(pty_master_fd); /* not used in the child */
+	    close(pty_slave_fd);  /* was duped above */
 	}
 
 	if (null_fd >= 0)
 	    close(null_fd);
 
-	if (pty_slave_fd >= 0)
-	{
-	    /* push stream discipline modules */
-	    SetupSlavePTY(pty_slave_fd);
-#  ifdef TIOCSCTTY
-	    /* Try to become controlling tty (probably doesn't work,
-	     * unless run by root) */
-	    ioctl(pty_slave_fd, TIOCSCTTY, (char *)NULL);
-#  endif
-	}
-
 	/* See above for type of argv. */
 	execvp(argv[0], argv);
 
--- a/src/version.c
+++ b/src/version.c
@@ -770,6 +770,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    842,
+/**/
     841,
 /**/
     840,