summaryrefslogtreecommitdiff
path: root/3c92e9206dc2e17fa5dc13f37be2926e9131ce94.patch
diff options
context:
space:
mode:
Diffstat (limited to '3c92e9206dc2e17fa5dc13f37be2926e9131ce94.patch')
-rw-r--r--3c92e9206dc2e17fa5dc13f37be2926e9131ce94.patch163
1 files changed, 163 insertions, 0 deletions
diff --git a/3c92e9206dc2e17fa5dc13f37be2926e9131ce94.patch b/3c92e9206dc2e17fa5dc13f37be2926e9131ce94.patch
new file mode 100644
index 0000000..b94a535
--- /dev/null
+++ b/3c92e9206dc2e17fa5dc13f37be2926e9131ce94.patch
@@ -0,0 +1,163 @@
+From 3c92e9206dc2e17fa5dc13f37be2926e9131ce94 Mon Sep 17 00:00:00 2001
+From: Pier Luigi Fiorini <pierluigi.fiorini@liri.io>
+Date: Sun, 7 Mar 2021 17:36:11 +0100
+Subject: [PATCH] Stop the helper process
+
+Make sure the helper process is stopped when shutting down.
+---
+ src/auth/Auth.cpp | 9 +++++++++
+ src/auth/Auth.h | 5 +++++
+ src/{daemon => common}/SignalHandler.cpp | 0
+ src/{daemon => common}/SignalHandler.h | 0
+ src/daemon/CMakeLists.txt | 3 ++-
+ src/daemon/Greeter.cpp | 2 ++
+ src/helper/CMakeLists.txt | 2 ++
+ src/helper/HelperApp.cpp | 14 +++++++++++++-
+ src/helper/HelperApp.h | 2 ++
+ 9 files changed, 35 insertions(+), 2 deletions(-)
+ rename src/{daemon => common}/SignalHandler.cpp (100%)
+ rename src/{daemon => common}/SignalHandler.h (100%)
+
+diff --git a/src/auth/Auth.cpp b/src/auth/Auth.cpp
+index caca3146..042d938b 100644
+--- a/src/auth/Auth.cpp
++++ b/src/auth/Auth.cpp
+@@ -358,6 +358,15 @@ namespace SDDM {
+ args << QStringLiteral("--greeter");
+ d->child->start(QStringLiteral("%1/sddm-helper").arg(QStringLiteral(LIBEXEC_INSTALL_DIR)), args);
+ }
++
++ void Auth::stop()
++ {
++ if (d->child->state() != QProcess::NotRunning) {
++ d->child->terminate();
++ if (!d->child->waitForFinished(5000))
++ d->child->kill();
++ }
++ }
+ }
+
+ #include "Auth.moc"
+diff --git a/src/auth/Auth.h b/src/auth/Auth.h
+index 87f5f440..c3ce1a62 100644
+--- a/src/auth/Auth.h
++++ b/src/auth/Auth.h
+@@ -157,6 +157,11 @@ namespace SDDM {
+ */
+ void start();
+
++ /**
++ * Stops the process.
++ */
++ void stop();
++
+ Q_SIGNALS:
+ void autologinChanged();
+ void greeterChanged();
+diff --git a/src/daemon/SignalHandler.cpp b/src/common/SignalHandler.cpp
+similarity index 100%
+rename from src/daemon/SignalHandler.cpp
+rename to src/common/SignalHandler.cpp
+diff --git a/src/daemon/SignalHandler.h b/src/common/SignalHandler.h
+similarity index 100%
+rename from src/daemon/SignalHandler.h
+rename to src/common/SignalHandler.h
+diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt
+index 86d014be..4660a2f2 100644
+--- a/src/daemon/CMakeLists.txt
++++ b/src/daemon/CMakeLists.txt
+@@ -13,6 +13,8 @@ set(DAEMON_SOURCES
+ ${CMAKE_SOURCE_DIR}/src/common/Session.cpp
+ ${CMAKE_SOURCE_DIR}/src/common/SocketWriter.cpp
++ ${CMAKE_SOURCE_DIR}/src/common/SignalHandler.cpp
++ ${CMAKE_SOURCE_DIR}/src/common/SignalHandler.h
+ ${CMAKE_SOURCE_DIR}/src/common/XauthUtils.cpp
+ ${CMAKE_SOURCE_DIR}/src/auth/Auth.cpp
+ ${CMAKE_SOURCE_DIR}/src/auth/AuthPrompt.cpp
+ ${CMAKE_SOURCE_DIR}/src/auth/AuthRequest.cpp
+@@ -27,7 +29,6 @@ set(DAEMON_SOURCES
+ PowerManager.cpp
+ Seat.cpp
+ SeatManager.cpp
+- SignalHandler.cpp
+ SocketServer.cpp
+ )
+
+diff --git a/src/daemon/Greeter.cpp b/src/daemon/Greeter.cpp
+index 436ecc3d..3b0ab2c3 100644
+--- a/src/daemon/Greeter.cpp
++++ b/src/daemon/Greeter.cpp
+@@ -225,6 +225,8 @@ namespace SDDM {
+ // wait for finished
+ if (!m_process->waitForFinished(5000))
+ m_process->kill();
++ } else {
++ m_auth->stop();
+ }
+ }
+
+diff --git a/src/helper/CMakeLists.txt b/src/helper/CMakeLists.txt
+index 8914ea75..f63dcc92 100644
+--- a/src/helper/CMakeLists.txt
++++ b/src/helper/CMakeLists.txt
+@@ -10,6 +10,8 @@ set(HELPER_SOURCES
+ ${CMAKE_SOURCE_DIR}/src/common/ConfigReader.cpp
+ ${CMAKE_SOURCE_DIR}/src/common/SafeDataStream.cpp
++ ${CMAKE_SOURCE_DIR}/src/common/SignalHandler.cpp
++ ${CMAKE_SOURCE_DIR}/src/common/SignalHandler.h
+ ${CMAKE_SOURCE_DIR}/src/common/XauthUtils.cpp
+ Backend.cpp
+ HelperApp.cpp
+ UserSession.cpp
+diff --git a/src/helper/HelperApp.cpp b/src/helper/HelperApp.cpp
+index 672359ae..12c3206e 100644
+--- a/src/helper/HelperApp.cpp
++++ b/src/helper/HelperApp.cpp
+@@ -22,7 +22,7 @@
+ #include "Backend.h"
+ #include "UserSession.h"
+ #include "SafeDataStream.h"
+-
++#include "SignalHandler.h"
+ #include "MessageHandler.h"
+ #include "VirtualTerminal.h"
+
+@@ -50,6 +50,18 @@ namespace SDDM {
+ , m_socket(new QLocalSocket(this)) {
+ qInstallMessageHandler(HelperMessageHandler);
+
++ m_signalHandler = new SignalHandler(this);
++ m_signalHandler->initialize();
++ connect(m_signalHandler, &SignalHandler::sigintReceived, this, &HelperApp::quit);
++ connect(m_signalHandler, &SignalHandler::sigtermReceived, this, &HelperApp::quit);
++
++ connect(this, &QCoreApplication::aboutToQuit, this, [this] {
++ m_session->terminate();
++ if (!m_session->waitForFinished(5000))
++ m_session->kill();
++ m_backend->closeSession();
++ });
++
+ QTimer::singleShot(0, this, SLOT(setUp()));
+ }
+
+diff --git a/src/helper/HelperApp.h b/src/helper/HelperApp.h
+index 3742df12..d08fd37b 100644
+--- a/src/helper/HelperApp.h
++++ b/src/helper/HelperApp.h
+@@ -31,6 +31,7 @@ class QLocalSocket;
+ namespace SDDM {
+ class Backend;
+ class UserSession;
++ class SignalHandler;
+ class HelperApp : public QCoreApplication
+ {
+ Q_OBJECT
+@@ -63,6 +64,7 @@ namespace SDDM {
+ QString m_user { };
+ // TODO: get rid of this in a nice clean way along the way with moving to user session X server
+ QByteArray m_cookie { };
++ SignalHandler *m_signalHandler = nullptr;
+
+ /*!
+ \brief Write utmp/wtmp/btmp records when a user logs in