[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