You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
5.5 KiB
164 lines
5.5 KiB
4 years ago
|
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
|