Use sigaction(2) instead of signal(3) to avoid the signal handler being

re-entered.
This commit is contained in:
Tim J. Robbins 2002-07-26 05:25:12 +00:00
parent 93c9745e20
commit 5b3df62e01
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=100697

View file

@ -94,6 +94,7 @@ int doclean; /* Should cleanup() remove output? */
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
struct sigaction sa;
long i; long i;
int ch; int ch;
const char *expr; const char *expr;
@ -145,9 +146,15 @@ main(int argc, char *argv[])
if (!kflag) { if (!kflag) {
doclean = 1; doclean = 1;
atexit(cleanup); atexit(cleanup);
signal(SIGHUP, handlesig); sa.sa_flags = 0;
signal(SIGINT, handlesig); sa.sa_handler = handlesig;
signal(SIGTERM, handlesig); sigemptyset(&sa.sa_mask);
sigaddset(&sa.sa_mask, SIGHUP);
sigaddset(&sa.sa_mask, SIGINT);
sigaddset(&sa.sa_mask, SIGTERM);
sigaction(SIGHUP, &sa, NULL);
sigaction(SIGINT, &sa, NULL);
sigaction(SIGTERM, &sa, NULL);
} }
lineno = 0; lineno = 0;