blob: 7949b2dbfbec4ef90c5213c9d02f6e08ca7b40a5 (
plain) (
tree)
|
|
From 3b00cd06f82837ba85f37c9f632261e7b4c6fd35 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Wed, 9 Dec 2020 19:28:41 +0100
Subject: [PATCH] Explicitly stop Xorg when starting fails
When Xorg starts but there is an error, stop it explicitly instead of assuming
that X exits itself. This avoids a possibly lingering Xorg process in the
XorgDisplayServer instance. Add a check and warning message if Xorg is
restarted too early (shouldn't happen).
---
src/daemon/XorgDisplayServer.cpp | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
index 5f40fe8c3..3a7bee0d8 100644
--- a/src/daemon/XorgDisplayServer.cpp
+++ b/src/daemon/XorgDisplayServer.cpp
@@ -118,6 +118,11 @@ namespace SDDM {
if (m_started)
return false;
+ if (process) {
+ qCritical() << "Tried to start Xorg before previous instance exited";
+ return false;
+ }
+
// create process
process = new QProcess(this);
@@ -195,6 +200,7 @@ namespace SDDM {
qCritical("Failed to open pipe to start X Server");
close(pipeFds[0]);
+ stop();
return false;
}
QByteArray displayNumber = readPipe.readLine();
@@ -203,6 +209,7 @@ namespace SDDM {
qCritical("Failed to read display number from pipe");
close(pipeFds[0]);
+ stop();
return false;
}
displayNumber.prepend(QByteArray(":"));
@@ -219,6 +226,7 @@ namespace SDDM {
if(m_display != QStringLiteral(":0")) {
if(!addCookie(m_authPath)) {
qCritical() << "Failed to write xauth file";
+ stop();
return false;
}
}
@@ -232,8 +240,7 @@ namespace SDDM {
}
void XorgDisplayServer::stop() {
- // check flag
- if (!m_started)
+ if (!process)
return;
// log message
|