From 42dd3956cc59297585c161ff735d89387a34d147 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Mon, 4 Feb 2013 09:07:22 +0900 Subject: [PATCH] agent: kill pinentry by SIGINT, fixing a bug to be killed by SIGINT. * agent/call-pinentry.c (atfork_cb): Reset signal mask and signal handler for child process. (agent_popup_message_stop): Send SIGINT (was: SIGKILL). -- pinentry-curses should be killed by SIGINT, so that it can reset terminal settings, but it didn't work. --- agent/call-pinentry.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/agent/call-pinentry.c b/agent/call-pinentry.c index 2483019b6..c945c1305 100644 --- a/agent/call-pinentry.c +++ b/agent/call-pinentry.c @@ -170,6 +170,16 @@ static void atfork_cb (void *opaque, int where) { ctrl_t ctrl = opaque; +#ifndef HAVE_W32_SYSTEM + struct sigaction sa; + + /* Pop up message should be able to be killed by SIGINT. */ + sigemptyset (&sa.sa_mask); + sa.sa_handler = SIG_DFL; + sa.sa_flags = 0; + sigaction (SIGINT, &sa, NULL); + sigprocmask (SIG_SETMASK, &sa.sa_mask, NULL); /* Unblock all signals. */ +#endif if (!where) { @@ -1159,8 +1169,7 @@ agent_popup_message_stop (ctrl_t ctrl) assuan_set_flag (entry_ctx, ASSUAN_NO_WAITPID, 1); } else if (pid > 0) - kill (pid, SIGKILL); /* Need to use SIGKILL due to bad - interaction of SIGINT with Pth. */ + kill (pid, SIGINT); #endif /* Now wait for the thread to terminate. */