Files
binary-repo/kde/extra/kscreenlocker/0001-Prevent-finishing-greeter-by-unhandled-signals.patch
T
2023-11-20 10:08:12 +00:00

46 lines
1.7 KiB
Diff

From b2a29a2537d11193546c5b85da9566c50c6e2af2 Mon Sep 17 00:00:00 2001
From: Dmitriy Konev <ddkonev@gmail.com>
Date: Sun, 18 Jun 2023 16:42:56 +0300
Subject: [PATCH] Prevent finishing greeter by unhandled signals
We have time gap between main() start and KSignalHandler registration
in which signals will close greeter
First this bug tried to fix in commit c63287ca1250d60f61c4429cbeb0215f5c3bebde
but placing KSignalHandler registration at start of main() is bad idea
because it broke mechanism for handling signals at all
and this behaviour was fixed in commit 448df7517021b9c2e68de161008ebc180363abed
by moving handlers bellow
for this reason we have this time gap
---
greeter/main.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/greeter/main.cpp b/greeter/main.cpp
index f5c3c05..10a6fcc 100644
--- a/greeter/main.cpp
+++ b/greeter/main.cpp
@@ -56,6 +56,12 @@ static void signalHandler(int signum)
int main(int argc, char *argv[])
{
+ sigset_t blockedSignals;
+ sigemptyset(&blockedSignals);
+ sigaddset(&blockedSignals, SIGTERM);
+ sigaddset(&blockedSignals, SIGUSR1);
+ pthread_sigmask(SIG_BLOCK, &blockedSignals, NULL);
+
LayerShellQt::Shell::useLayerShell();
// disable ptrace on the greeter
@@ -94,6 +100,8 @@ int main(int argc, char *argv[])
// only connect signal handler once we can actual handle the signal properly
QObject::connect(KSignalHandler::self(), &KSignalHandler::signalReceived, &app, &signalHandler);
+ pthread_sigmask(SIG_UNBLOCK, &blockedSignals, NULL);
+
app.setQuitOnLastWindowClosed(false);
QCoreApplication::setApplicationName(QStringLiteral("kscreenlocker_greet"));
QCoreApplication::setApplicationVersion(QStringLiteral("0.1"));
--
2.41.0