[lm-sensors] [PATCH v2 6/7] sensord: Use sigaction() for signal handlers
Andre Prendel
andre.prendel at gmx.de
Mon May 11 18:04:19 CEST 2009
Replace the deprecated signal() function by sigaction().
The signal() function has some disadvantages. This patch replaces
signal() by sigaction() to install the signal handlers.
Changes in v2:
Zero sigaction structure.
sensord.c | 33 ++++++++++++++++++++++++++-------
1 file changed, 26 insertions(+), 7 deletions(-)
Index: quilt-sensors/prog/sensord/sensord.c
===================================================================
--- quilt-sensors.orig/prog/sensord/sensord.c 2009-05-08 19:55:45.000000000 +0200
+++ quilt-sensors/prog/sensord/sensord.c 2009-05-08 21:18:30.000000000 +0200
@@ -65,7 +65,6 @@
static void signalHandler(int sig)
{
- signal(sig, signalHandler);
switch (sig) {
case SIGTERM:
done = 1;
@@ -147,6 +146,31 @@
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 @@
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()");
More information about the lm-sensors
mailing list