patch 8.1.0889: MS-Windows: a channel write may hang

Problem:    MS-Windows: a channel write may hang.
Solution:   Check for WriteFile() not writing anything. (Yasuhiro Matsumoto,
            closes #3920)
diff --git a/src/channel.c b/src/channel.c
index 34a1fc3..d728c77 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -91,9 +91,10 @@
 	    size = MAX_NAMED_PIPE_SIZE;
 	else
 	    size = (DWORD)todo;
-	// If the pipe overflows while the job does not read the data, WriteFile
-	// will block forever. This abandons the write.
+	// If the pipe overflows while the job does not read the data,
+	// WriteFile() will block forever. This abandons the write.
 	memset(&ov, 0, sizeof(ov));
+	nwrite = 0;
 	if (!WriteFile(h, buf + done, size, &nwrite, &ov))
 	{
 	    DWORD err = GetLastError();
@@ -104,6 +105,10 @@
 		return -1;
 	    FlushFileBuffers(h);
 	}
+	else if (nwrite == 0)
+	    // WriteFile() returns TRUE but did not write anything. This causes
+	    // a hang, so bail out.
+	    break;
 	todo -= nwrite;
 	done += nwrite;
     }