1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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
|