Skip to content

Commit

Permalink
Make sure lockfiles are unlocked when dying on SIGPIPE
Browse files Browse the repository at this point in the history
We cleaned up lockfiles upon receiving the usual suspects HUP, TERM, QUIT
but a wicked user could kill us of asphyxiation by piping our output to a
pipe that does not read.  Protect ourselves by catching SIGPIPE and clean
up the lockfiles as well in such a case.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
gitster committed Dec 21, 2008
1 parent c55fae4 commit 0693f9d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
1 change: 1 addition & 0 deletions lockfile.c
Expand Up @@ -140,6 +140,7 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)
signal(SIGHUP, remove_lock_file_on_signal);
signal(SIGTERM, remove_lock_file_on_signal);
signal(SIGQUIT, remove_lock_file_on_signal);
signal(SIGPIPE, remove_lock_file_on_signal);
atexit(remove_lock_file);
}
lk->owner = getpid();
Expand Down
17 changes: 17 additions & 0 deletions t/t3600-rm.sh
Expand Up @@ -251,4 +251,21 @@ test_expect_success 'refresh index before checking if it is up-to-date' '
'

test_expect_success 'choking "git rm" should not let it die with cruft' '
git reset -q --hard &&
H=0000000000000000000000000000000000000000 &&
i=0 &&
while test $i -lt 12000
do
echo "100644 $H 0 some-file-$i"
i=$(( $i + 1 ))
done | git update-index --index-info &&
git rm -n "some-file-*" | :;
test -f .git/index.lock
status=$?
rm -f .git/index.lock
git reset -q --hard
test "$status" != 0
'

test_done

0 comments on commit 0693f9d

Please sign in to comment.