You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Spotted while building v2.33.1-1, but bisecting seems to point to this having always failed, which implies whatever has changed to cause the failure is in the Cygwin environment rather than in Git itself.
The text was updated successfully, but these errors were encountered:
ttaylorr
pushed a commit
to ttaylorr/git
that referenced
this issue
Oct 16, 2024
Clients can signal the git-credential-cache(1) daemon that it is
supposed to exit by sending it an "exit" command. The details around
how exactly the daemon exits seem to be rather intricate as spelt out by
a comment surrounding our call to exit(3p), as we need to be mindful
around closing the client streams before we signal the client.
The logic is broken on Cygwin though: when a client asks the daemon to
exit, they won't see the EOF and will instead get an error message:
fatal: read error from cache daemon: Software caused connection abort
This issue is known in Cygwin, see for example [1], but the exact root
cause is not known.
As it turns out, we can avoid the issue by explicitly closing the client
streams via fclose(3p). I'm not sure at all where the claimed atexit(3p)
handler mentioned in the comment is supposed to live, but from all I can
see we do not have any installed that would close the sockets for us. So
this leaves me with a bit of a sour taste overall.
That being said, I couldn't spot anything obviously wrong with closing
the streams ourselves, and it does fix the issue on Cygwin without any
regressions on other platforms as far as I can see. So let's go for this
fix, even though I cannot properly explain it.
[1]: cygporter/git#51
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Spotted while building v2.33.1-1, but bisecting seems to point to this having always failed, which implies whatever has changed to cause the failure is in the Cygwin environment rather than in Git itself.
The text was updated successfully, but these errors were encountered: