From 2c41d51395b10a41a93015331e5c10f7174bac8c Mon Sep 17 00:00:00 2001 From: mdw Date: Sat, 3 Feb 2001 16:06:44 +0000 Subject: [PATCH] Don't set a handler for @SIGINT@ if it's ignored at startup. Add some error handling for the @select@ loop. --- pixie.c | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/pixie.c b/pixie.c index ecbab8f..5482798 100644 --- a/pixie.c +++ b/pixie.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: pixie.c,v 1.8 2001/01/25 22:19:31 mdw Exp $ + * $Id: pixie.c,v 1.9 2001/02/03 16:06:44 mdw Exp $ * * Passphrase pixie for Catacomb * @@ -30,6 +30,10 @@ /*----- Revision history --------------------------------------------------* * * $Log: pixie.c,v $ + * Revision 1.9 2001/02/03 16:06:44 mdw + * Don't set a handler for @SIGINT@ if it's ignored at startup. Add some + * error handling for the @select@ loop. + * * Revision 1.8 2001/01/25 22:19:31 mdw * Make flags be unsigned. * @@ -1389,8 +1393,11 @@ int main(int argc, char *argv[]) { static sig sigint, sigterm, sigquit, sighup; + struct sigaction sa; sig_init(&sel); - sig_add(&sigint, SIGINT, pix_sigdie, 0); + sigaction(SIGINT, 0, &sa); + if (sa.sa_handler != SIG_IGN) + sig_add(&sigint, SIGINT, pix_sigdie, 0); sig_add(&sigterm, SIGTERM, pix_sigdie, 0); sig_add(&sigquit, SIGQUIT, pix_sigflush, 0); sig_add(&sighup, SIGHUP, pix_sigflush, 0); @@ -1431,14 +1438,28 @@ int main(int argc, char *argv[]) chdir("/"); setsid(); - if (fork() > 0) + if (fork() >= 0) _exit(0); } if (verbose) log("initialized ok"); - for (;;) - sel_select(&sel); + + { + int selerr = 0; + for (;;) { + if (!sel_select(&sel)) + selerr = 0; + else if (errno != EINTR && errno != EAGAIN) { + log("error from select: %s", strerror(errno)); + selerr++; + if (selerr > 8) { + log("too many consecutive select errors: bailing out"); + exit(EXIT_FAILURE); + } + } + } + } return (0); } -- 2.11.0