Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/perl
diff options
context:
space:
mode:
authorAbhijit Menon-Sen <ams@toroid.org>2008-08-04 15:38:27 +0400
committerJunio C Hamano <gitster@pobox.com>2008-08-05 08:51:17 +0400
commit108c2aaf7984081daa6aed6d3947c7c0952216c2 (patch)
tree659dc0c3bbab67fac09d5263a93327c4de0f245d /perl
parentc72e0db1ff686e93478ee21a3e80a9ca73143753 (diff)
Git.pm: localise $? in command_close_bidi_pipe()
Git::DESTROY calls _close_cat_blob and _close_hash_and_insert_object, which in turn call command_close_bidi_pipe, which calls waitpid, which alters $?. If this happens during global destruction, it may alter the program's exit status unexpectedly. Making $? local to the function solves the problem. (The problem was discovered due to a failure of test #8 in t9106-git-svn-commit-diff-clobber.sh.) Signed-off-by: Abhijit Menon-Sen <ams@toroid.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'perl')
-rw-r--r--perl/Git.pm1
1 files changed, 1 insertions, 0 deletions
diff --git a/perl/Git.pm b/perl/Git.pm
index 087d3d0e82..faaa19f62e 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -417,6 +417,7 @@ have more complicated structure.
=cut
sub command_close_bidi_pipe {
+ local $?;
my ($pid, $in, $out, $ctx) = @_;
foreach my $fh ($in, $out) {
unless (close $fh) {