diff src/channel.c @ 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 d89c5b339c2a
children bfbdef46aa7d
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