From 13dc7c02323b66868ace592ecffd1ee9bd9a9155 Mon Sep 17 00:00:00 2001 From: Andre Prendel Date: Wed, 13 May 2009 16:11:57 +0000 Subject: [PATCH] Replace the deprecated signal() function by sigaction(). git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@5723 7894878c-1315-0410-8ee3-d5d059ff63e0 --- prog/sensord/sensord.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/prog/sensord/sensord.c b/prog/sensord/sensord.c index 8d512211..59e5a728 100644 --- a/prog/sensord/sensord.c +++ b/prog/sensord/sensord.c @@ -65,7 +65,6 @@ void sensorLog(int priority, const char *fmt, ...) static void signalHandler(int sig) { - signal(sig, signalHandler); switch (sig) { case SIGTERM: done = 1; @@ -147,6 +146,31 @@ static void openLog(void) logOpened = 1; } +static void install_sighandler(void) +{ + struct sigaction new; + int ret; + + memset(&new, 0, sizeof(struct sigaction)); + new.sa_handler = signalHandler; + sigemptyset(&new.sa_mask); + new.sa_flags = SA_RESTART; + + ret = sigaction(SIGTERM, &new, NULL); + if (ret == -1) { + fprintf(stderr, "Could not set sighandler for SIGTERM: %s\n", + strerror(errno)); + exit(EXIT_FAILURE); + } + + ret = sigaction(SIGHUP, &new, NULL); + if (ret == -1) { + fprintf(stderr, "Could not set sighandler for SIGHUP: %s\n", + strerror(errno)); + exit(EXIT_FAILURE); + } +} + static void daemonize(void) { int pid; @@ -172,12 +196,7 @@ static void daemonize(void) exit(EXIT_FAILURE); } - /* I should use sigaction but... */ - if (signal(SIGTERM, signalHandler) == SIG_ERR || - signal (SIGHUP, signalHandler) == SIG_ERR) { - perror("signal"); - exit(EXIT_FAILURE); - } + install_sighandler(); if ((pid = fork()) == -1) { perror("fork()");