Allow diff and index commands to be interrupted

So far, e.g. git-update-index --refresh was basically uninterruptable
by ctrl-c, since it hooked the SIGINT handler, but that handler would
only unlink the lockfile but not actually quit. This makes it propagate
the signal to the default handler.

Note that I expected it to work without resetting the signal handler to
SIG_DFL, but without that it ended in an infinite loop of tgkill()s -
is my glibc violating SUS or what?

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Petr Baudis 2006-02-01 00:40:33 +01:00 committed by Junio C Hamano
parent 884944239f
commit 6a1f79c1f1
2 changed files with 4 additions and 0 deletions

2
diff.c
View file

@ -555,6 +555,8 @@ static void remove_tempfile(void)
static void remove_tempfile_on_signal(int signo)
{
remove_tempfile();
signal(SIGINT, SIG_DFL);
raise(signo);
}
/* An external diff command takes:

View file

@ -18,6 +18,8 @@ static void remove_lock_file(void)
static void remove_lock_file_on_signal(int signo)
{
remove_lock_file();
signal(SIGINT, SIG_DFL);
raise(signo);
}
int hold_index_file_for_update(struct cache_file *cf, const char *path)