diff options
Diffstat (limited to 'sysutils/smartmontools/files/patch-smartd.cpp')
| -rw-r--r-- | sysutils/smartmontools/files/patch-smartd.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/sysutils/smartmontools/files/patch-smartd.cpp b/sysutils/smartmontools/files/patch-smartd.cpp new file mode 100644 index 000000000000..e0e47039ca41 --- /dev/null +++ b/sysutils/smartmontools/files/patch-smartd.cpp @@ -0,0 +1,50 @@ +--- smartd.cpp.orig 2026-02-17 17:19:34 UTC ++++ smartd.cpp +@@ -97,7 +97,7 @@ extern "C" { + typedef void (*signal_handler_type)(int); + } + +-static void set_signal_if_not_ignored(int sig, signal_handler_type handler) ++static void set_signal(int sig, signal_handler_type handler) + { + #if defined(_WIN32) + // signal() emulation +@@ -105,13 +105,7 @@ static void set_signal_if_not_ignored(int sig, signal_ + + #else + // SVr4, POSIX.1-2001, ..., POSIX.1-2024 +- struct sigaction sa; +- sa.sa_handler = SIG_DFL; +- sigaction(sig, (struct sigaction *)0, &sa); +- if (sa.sa_handler == SIG_IGN) +- return; +- +- sa = {}; ++ struct sigaction sa = {}; + sa.sa_handler = handler; + sa.sa_flags = SA_RESTART; // BSD signal() semantics + sigaction(sig, &sa, (struct sigaction *)0); +@@ -4401,17 +4395,17 @@ static void CheckDevicesOnce(const dev_config_vector & + static void install_signal_handlers() + { + // normal and abnormal exit +- set_signal_if_not_ignored(SIGTERM, sighandler); +- set_signal_if_not_ignored(SIGQUIT, sighandler); ++ set_signal(SIGTERM, sighandler); ++ set_signal(SIGQUIT, sighandler); + + // in debug mode, <CONTROL-C> ==> HUP +- set_signal_if_not_ignored(SIGINT, (debugmode ? HUPhandler : sighandler)); ++ set_signal(SIGINT, (debugmode ? HUPhandler : sighandler)); + + // Catch HUP and USR1 +- set_signal_if_not_ignored(SIGHUP, HUPhandler); +- set_signal_if_not_ignored(SIGUSR1, USR1handler); ++ set_signal(SIGHUP, HUPhandler); ++ set_signal(SIGUSR1, USR1handler); + #ifdef _WIN32 +- set_signal_if_not_ignored(SIGUSR2, USR2handler); ++ set_signal(SIGUSR2, USR2handler); + #endif + } + |
