]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
util: use sigaction() to set signal handler
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 27 Jul 2015 12:41:14 +0000 (14:41 +0200)
committerMiroslav Lichvar <mlichvar@redhat.com>
Tue, 28 Jul 2015 09:57:57 +0000 (11:57 +0200)
util.c

diff --git a/util.c b/util.c
index 126c74f9d83665323e525b06e3f77837bf91b3c7..e3ffbf9cbd25715a11c1d1090ff994d6341727bc 100644 (file)
--- a/util.c
+++ b/util.c
@@ -845,11 +845,29 @@ UTI_DecodePasswordFromText(char *key)
 int
 UTI_SetQuitSignalsHandler(void (*handler)(int))
 {
-  signal(SIGINT, handler);
-  signal(SIGTERM, handler);
-#if !defined(WINNT)
-  signal(SIGQUIT, handler);
-  signal(SIGHUP, handler);
-#endif /* WINNT */
+  struct sigaction sa;
+
+  sa.sa_handler = handler;
+  sa.sa_flags = SA_RESTART;
+  if (sigemptyset(&sa.sa_mask) < 0)
+    return 0;
+
+#ifdef SIGINT
+  if (sigaction(SIGINT, &sa, NULL) < 0)
+    return 0;
+#endif
+#ifdef SIGTERM
+  if (sigaction(SIGTERM, &sa, NULL) < 0)
+    return 0;
+#endif
+#ifdef SIGQUIT
+  if (sigaction(SIGQUIT, &sa, NULL) < 0)
+    return 0;
+#endif
+#ifdef SIGHUP
+  if (sigaction(SIGHUP, &sa, NULL) < 0)
+    return 0;
+#endif
+
   return 1;
 }