forked from git-for-windows/MSYS2-packages
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
msys2-runtime: fix Git's t3701-add-interactive
This reverts the problematic commit that causes a hang when `git add -p` has `cat.exe` configured as a diff filter, and that diff filter is fed input larger than the pipe's buffer size. This fixes git-for-windows/git#4422. Signed-off-by: Johannes Schindelin <[email protected]>
- Loading branch information
Showing
3 changed files
with
69 additions
and
5 deletions.
There are no files selected for viewing
62 changes: 62 additions & 0 deletions
62
msys2-runtime/0061-Revert-Cygwin-pipe-Restore-blocking-mode-for-cygwin-.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
From 0e357e24075b2e8b66c9772bf56d3db6203f88fa Mon Sep 17 00:00:00 2001 | ||
From: Johannes Schindelin <[email protected]> | ||
Date: Tue, 16 May 2023 12:43:51 +0200 | ||
Subject: [PATCH 61/N] Revert "Cygwin: pipe: Restore blocking mode for cygwin | ||
process at startup." | ||
|
||
When Git for Windows upgraded its MSYS2 runtime from v3.3.* to v3.4.* at | ||
long last, the t3701-add-interactive test of Git's test suite started to | ||
hang consistently, timing out. | ||
|
||
The culprit is a `git add -p` call that wants to read from a diff | ||
filter. This diff filter is `cat.exe`, i.e. nothing special, but that | ||
diff filter gets input that is larger than the pipe buffer, and | ||
therefore must not block. Yet that is exactly what it does. | ||
|
||
This was a regression that introduced by upgrading from MSYS2 runtime | ||
v3.3.*. After a tedious, multi-day bisection session, the commit | ||
introducing that regression was identified as 90788821b7 (Cygwin: pipe: | ||
Restore blocking mode for cygwin process at startup., 2021-11-17), which | ||
we hereby revert. | ||
|
||
So what bug does this reversion reintroduce? | ||
|
||
The commit seems to have been in response to | ||
https://inbox.sourceware.org/cygwin/CAEv6GOB8PXHgHoz7hdJy6Bia2GWEmUDnTd252gTGinz2vuv=hA@mail.gmail.com/ | ||
which reported a bug when a C# program writes 0-byte content to a Cygwin | ||
pipe. (Irony of ironies, this report originated from Git's realm, over | ||
at https://github.com/git-ecosystem/git-credential-manager/issues/509.) | ||
|
||
The analysis revealed, back in December '21, that a `CYGWIN=pipe_byte` | ||
would work around the bug, too, but that did not fix the regression in | ||
Git's test suite. | ||
|
||
That leaves us with the somewhat unsatisfying conclusion that we _might_ | ||
reintroduce a regression when Git Credential Manager tries to talk to an | ||
_MSYS_ `git.exe`. But since we do not need that in Git for Windows, and | ||
since we need to have CI builds that do not time out after 6h causing | ||
failures, it is better to revert that commit, and in the hopefully | ||
unlikely event that this causes _other_ problems in Git for Windows' | ||
ecosystem, we will simply have to revisit this issue in more depth. | ||
|
||
This fixes https://github.com/git-for-windows/git/issues/4422. | ||
|
||
Signed-off-by: Johannes Schindelin <[email protected]> | ||
--- | ||
winsup/cygwin/dtable.cc | 3 --- | ||
1 file changed, 3 deletions(-) | ||
|
||
diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc | ||
index f90465d..ce1bbbe 100644 | ||
--- a/winsup/cygwin/dtable.cc | ||
+++ b/winsup/cygwin/dtable.cc | ||
@@ -410,9 +410,6 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle) | ||
{ | ||
fhandler_pipe *fhp = (fhandler_pipe *) fh; | ||
fhp->set_pipe_buf_size (); | ||
- /* Set read pipe always to nonblocking */ | ||
- fhp->set_pipe_non_blocking (fhp->get_device () == FH_PIPER ? | ||
- true : fhp->is_nonblocking ()); | ||
} | ||
|
||
if (!fh->open_setup (openflags)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
82f0d822f7e5ed5b4c5f335bc014a6404f7036f1 | ||
0e357e24075b2e8b66c9772bf56d3db6203f88fa |