summaryrefslogtreecommitdiff
path: root/start/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'start/src/main.cpp')
-rw-r--r--start/src/main.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/start/src/main.cpp b/start/src/main.cpp
index 78fbf0f4..74de393c 100644
--- a/start/src/main.cpp
+++ b/start/src/main.cpp
@@ -1,4 +1,5 @@
#include <csignal>
+#include <cstring>
#include <print>
#include "helpers/Logger.hpp"
@@ -28,14 +29,23 @@ static void onSignal(int sig) {
exit(0);
}
+static void terminateChildOnSignal(int signal) {
+ struct sigaction sa;
+ sa.sa_handler = onSignal;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = SA_RESTART;
+ int ret = sigaction(signal, &sa, nullptr);
+ if (ret != 0)
+ g_logger->log(Hyprutils::CLI::LOG_WARN, "Failed to set up handler for signal {}: {}", signal, strerror(errno));
+}
+
int main(int argc, const char** argv, const char** envp) {
g_logger = makeUnique<Hyprutils::CLI::CLoggerConnection>(*g_loggerMain);
g_logger->setName("start-hyprland");
g_logger->setLogLevel(Hyprutils::CLI::LOG_DEBUG);
- signal(SIGTERM, ::onSignal);
- signal(SIGINT, ::onSignal);
- signal(SIGKILL, ::onSignal);
+ terminateChildOnSignal(SIGTERM);
+ terminateChildOnSignal(SIGINT);
int startArgv = -1;
@@ -84,4 +94,4 @@ int main(int argc, const char** argv, const char** envp) {
}
return 0;
-} \ No newline at end of file
+}