Attempt to raise the default signal handler (SIG_DFL) when exiting because

of a signal, rather than just relying upon exit(3).
This commit is contained in:
lukem 2007-07-18 01:13:42 +00:00
parent a93b9bed51
commit 2c1030d08e
1 changed files with 15 additions and 5 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: at.c,v 1.23 2007/07/18 01:06:08 lukem Exp $ */
/* $NetBSD: at.c,v 1.24 2007/07/18 01:13:42 lukem Exp $ */
/*
* at.c : Put file into atrun queue
@ -70,7 +70,7 @@ enum { ATQ, ATRM, AT, BATCH, CAT }; /* what program we want to run */
#if 0
static char rcsid[] = "$OpenBSD: at.c,v 1.15 1998/06/03 16:20:26 deraadt Exp $";
#else
__RCSID("$NetBSD: at.c,v 1.23 2007/07/18 01:06:08 lukem Exp $");
__RCSID("$NetBSD: at.c,v 1.24 2007/07/18 01:13:42 lukem Exp $");
#endif
#endif
@ -106,13 +106,22 @@ static void process_jobs (int, char **, int);
static void
sigc(int signo)
{
/* If the user presses ^C, remove the spool file and exit. */
struct sigaction act;
/* If a signal interrupts us, remove the spool file and exit. */
if (fcreated) {
PRIV_START
(void)unlink(atfile);
PRIV_END
}
/* Raise the default signal handler for the signal that was invoked. */
memset(&act, 0, sizeof act);
act.sa_handler = SIG_DFL;
sigemptyset(&(act.sa_mask));
act.sa_flags = 0;
sigaction(signo, &act, NULL);
raise(signo);
/* Fall-back to exit */
exit(EXIT_FAILURE);
}
@ -121,7 +130,8 @@ static void
alarmc(int signo)
{
/* Time out after some seconds. */
panic("File locking timed out");
warnx("File locking timed out");
sigc(signo);
}
/* Local functions */