Files
ports/sysutils/smartmontools/files/patch-smartd.cpp
T
Oleksii Samorukov 5455b3dd17 sysutils/smartmontools: fix reload command
- add patch from upstream to set signals regardless existing flags
- simplify rc script by handling reload natively

PR: 293205
2026-02-17 18:37:02 +01:00

51 lines
1.6 KiB
C++

--- 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
}