From 206e597b046e4d565af7ef866dc178621e0c579d Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Mon, 27 Jul 2015 14:41:14 +0200 Subject: [PATCH] util: use sigaction() to set signal handler --- util.c | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/util.c b/util.c index 126c74f..e3ffbf9 100644 --- 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; }