From: Sam Vilain <sam.vilain@catalyst.net.nz>
To: git@vger.kernel.org
Cc: bert Dvornik <dvornik+git@gmail.com>,
Johannes Sixt <j6t@kdbg.org>, Junio C Hamano <gitster@pobox.com>
Subject: [PATCH 096/104] start_command: close cmd->err descriptor when fork/spawn fails
Date: Wed, 26 May 2010 18:01:06 +1200 [thread overview]
Message-ID: <1274853674-18521-96-git-send-email-sam.vilain@catalyst.net.nz> (raw)
In-Reply-To: <1274853674-18521-1-git-send-email-sam.vilain@catalyst.net.nz>
From: bert Dvornik <dvornik+git@gmail.com>
Fix the problem where the cmd->err passed into start_command wasn't
being properly closed when certain types of errors occurr. (Compare
the affected code with the clean shutdown code later in the function.)
On Windows, this problem would be triggered if mingw_spawnvpe()
failed, which would happen if the command to be executed was malformed
(e.g. a text file that didn't start with a #! line). If cmd->err was
a pipe, the failure to close it could result in a hang while the other
side was waiting (forever) for either input or pipe close, e.g. while
trying to shove the output into the side band. On msysGit, this
problem was causing a hang in t5516-fetch-push.
[J6t: With a slight adjustment of the test case, the hang is also
observed on Linux.]
Signed-off-by: bert Dvornik <dvornik+git@gmail.com>
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
run-command.c | 2 ++
t/t5516-fetch-push.sh | 2 +-
2 files changed, 3 insertions(+), 1 deletions(-)
diff --git a/run-command.c b/run-command.c
index eb5c575..c7793f5 100644
--- a/run-command.c
+++ b/run-command.c
@@ -383,6 +383,8 @@ fail_pipe:
close(cmd->out);
if (need_err)
close_pair(fderr);
+ else if (cmd->err)
+ close(cmd->err);
errno = failed_errno;
return -1;
}
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 2de98e6..6a37a4d 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -528,7 +528,7 @@ test_expect_success 'push does not update local refs on failure' '
mk_test heads/master &&
mk_child child &&
mkdir testrepo/.git/hooks &&
- echo exit 1 >testrepo/.git/hooks/pre-receive &&
+ echo "#!/no/frobnication/today" >testrepo/.git/hooks/pre-receive &&
chmod +x testrepo/.git/hooks/pre-receive &&
(cd child &&
git pull .. master
--
1.7.1.rc2.333.gb2668
next prev parent reply other threads:[~2010-05-26 6:07 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1274853674-18521-1-git-send-email-sam.vilain@catalyst.net.nz>
2010-05-26 6:00 ` [PATCH 075/104] tests: chmod +x t5150 Sam Vilain
2010-05-26 6:00 ` [PATCH 076/104] t7604-merge-custom-message: shift expected output creation Sam Vilain
2010-05-26 6:00 ` [PATCH 082/104] fmt-merge-msg: add function to append shortlog only Sam Vilain
2010-05-26 6:00 ` [PATCH 084/104] autocrlf: Make it work also for un-normalized repositories Sam Vilain
2010-05-26 6:00 ` [PATCH 086/104] gitweb: Use @diff_opts while using format-patch Sam Vilain
2010-05-26 6:00 ` [PATCH 087/104] hash_object: correction for zero length file Sam Vilain
2010-05-26 6:00 ` [PATCH 088/104] for-each-ref: Field with abbreviated objectname Sam Vilain
2010-05-26 6:01 ` [PATCH 090/104] Documentation: rebase -i ignores options passed to "git am" Sam Vilain
2010-05-26 6:01 ` [PATCH 091/104] Documentation: fix minor inconsistency Sam Vilain
2010-05-26 6:01 ` [PATCH 092/104] Documentation/gitdiffcore: fix order in pickaxe description Sam Vilain
2010-05-26 6:01 ` [PATCH 093/104] post-receive-email: document command-line mode Sam Vilain
2010-05-26 6:01 ` [PATCH 094/104] diff: fix coloring of extended diff headers Sam Vilain
2010-05-26 6:01 ` [PATCH 095/104] Fix "Out of memory? mmap failed" for files larger than 4GB on Windows Sam Vilain
2010-05-26 6:01 ` Sam Vilain [this message]
2010-05-26 6:01 ` [PATCH 097/104] Fix checkout of large files to network shares on Windows XP Sam Vilain
2010-05-26 6:01 ` [PATCH 098/104] mingw: use _commit to implement fsync Sam Vilain
2010-05-26 6:01 ` [PATCH 099/104] Recent MinGW has a C99 implementation of snprintf functions Sam Vilain
2010-05-26 6:01 ` [PATCH 100/104] Complete prototype of git_config_from_parameters() Sam Vilain
2010-05-26 6:01 ` [PATCH 101/104] test get_git_work_tree() return value for NULL Sam Vilain
2010-05-26 6:01 ` [PATCH 102/104] t7502-commit: fix spelling Sam Vilain
2010-05-26 6:01 ` [PATCH 103/104] show-branch: use DEFAULT_ABBREV instead of 7 Sam Vilain
2010-05-26 6:01 ` [PATCH 104/104] Documentation/SubmittingPatches: clarify GMail section and SMTP Sam Vilain
[not found] ` <1274853674-18521-22-git-send-email-sam.vilain@catalyst.net.nz>
2010-05-26 7:46 ` [PATCH 022/104] Gitweb: ignore built file Sverre Rabbelier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1274853674-18521-96-git-send-email-sam.vilain@catalyst.net.nz \
--to=sam.vilain@catalyst.net.nz \
--cc=dvornik+git@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=j6t@kdbg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).