git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Allow diff and index commands to be interrupted

From
Petr Baudis <pasky@suse.cz>
Date
Jan 31, 2006, 23:40 UTC
Message-ID
<20060131234033.16288.34502.stgit@machine.or.cz>

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>
---
 diff.c  |    2 ++
 index.c |    2 ++
 2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/diff.c b/diff.c
index 8ae6dbc..ec51e7d 100644
--- a/diff.c
+++ b/diff.c
@@ -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:
diff --git a/index.c b/index.c
index ad0eafe..f92b960 100644
--- a/index.c
+++ b/index.c
@@ -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)
Message 1 of 1 in “Allow diff and index commands to be interrupted”
  1. Allow diff and index commands to be interruptedPetr Baudis, Jan 31, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.