From 56390fac62596161cfcf255f13d6a52dccb289e4 Mon Sep 17 00:00:00 2001 From: Bjorn Winckler Date: Fri, 22 Jul 2011 19:26:13 +0200 Subject: [PATCH] Fix for zsh causing freezes on Lion Make sure tty is opened using the same flags as when opening the pty. In particular, the O_NOCTTY was missing from the tty open call. This caused waitpid() to always return 0 and Vim would get stuck in an endless loop waiting for the child to exit. --- src/os_unix.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/os_unix.c b/src/os_unix.c index 25b000cab1..3001a22254 100644 --- a/src/os_unix.c +++ b/src/os_unix.c @@ -3907,11 +3907,20 @@ mch_call_shell(cmd, options) if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE))) { pty_master_fd = OpenPTY(&tty_name); /* open pty */ - if (pty_master_fd >= 0 && ((pty_slave_fd = - open(tty_name, O_RDWR | O_EXTRA, 0)) < 0)) + if (pty_master_fd >= 0) { - close(pty_master_fd); - pty_master_fd = -1; +#if !defined(MACOS) || defined(USE_CARBONIZED) + pty_slave_fd = open(tty_name, O_RDWR | O_EXTRA, 0); +#else + /* Leaving out O_NOCTTY may lead to waitpid() always returning + * 0 on Mac OS X 10.7 thereby causing freezes. */ + pty_slave_fd = open(tty_name, O_RDWR | O_NOCTTY | O_EXTRA); +#endif + if (pty_slave_fd < 0) + { + close(pty_master_fd); + pty_master_fd = -1; + } } } /*