changeset 15577:f611222a4349 v8.1.0796

patch 8.1.0796: MS-Windows 7: problem with named pipe on channel commit https://github.com/vim/vim/commit/31faed60bfd54ff8f612f6b311a6cbcd9e7ebedd Author: Bram Moolenaar <Bram@vim.org> Date: Tue Jan 22 23:01:40 2019 +0100 patch 8.1.0796: MS-Windows 7: problem with named pipe on channel Problem: MS-Windows 7: problem with named pipe on channel. Solution: Put back the disconnect/connect calls. (Yasuhiro Matsumoto, closes #3833)
author Bram Moolenaar <Bram@vim.org>
date Tue, 22 Jan 2019 23:15:05 +0100
parents 5d765761b75c
children 85190e2fcf05
files src/channel.c src/testdir/test_terminal.vim src/version.c
diffstat 3 files changed, 19 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/channel.c
+++ b/src/channel.c
@@ -3181,7 +3181,13 @@ channel_wait(channel_T *channel, sock_T 
 
 	    if (r && nread > 0)
 		return CW_READY;
-	    if (r == 0)
+
+	    if (channel->ch_named_pipe)
+	    {
+		DisconnectNamedPipe((HANDLE)fd);
+		ConnectNamedPipe((HANDLE)fd, NULL);
+	    }
+	    else if (r == 0)
 		return CW_ERROR;
 
 	    /* perhaps write some buffer lines */
@@ -3813,7 +3819,16 @@ channel_send(
 	if (part == PART_SOCK)
 	    res = sock_write(fd, (char *)buf, len);
 	else
+	{
 	    res = fd_write(fd, (char *)buf, len);
+#ifdef WIN32
+	    if (channel->ch_named_pipe && res < 0)
+	    {
+		DisconnectNamedPipe((HANDLE)fd);
+		ConnectNamedPipe((HANDLE)fd, NULL);
+	    }
+#endif
+	}
 	if (res < 0 && (errno == EWOULDBLOCK
 #ifdef EAGAIN
 			|| errno == EAGAIN
--- a/src/testdir/test_terminal.vim
+++ b/src/testdir/test_terminal.vim
@@ -644,8 +644,7 @@ endfunc
 
 func Test_terminal_no_cmd()
   " Does not work on Mac.
-  " Todo: make this work on Win32 again
-  if has('mac') || has('win32')
+  if has('mac')
     return
   endif
   let buf = term_start('NONE', {})
--- a/src/version.c
+++ b/src/version.c
@@ -792,6 +792,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    796,
+/**/
     795,
 /**/
     794,