Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Add support for the DisplayStopCommand entry #395
Conversation
davidedmundson
reviewed
Apr 2, 2015
| + QString displayStopCommand = mainConfig.XDisplay.DisplayStopCommand.get(); | ||
| + | ||
| + // create display setup script process | ||
| + QProcess *displayStopScript = new QProcess(); |
tseliot
Apr 2, 2015
On 02-04-15 08:55:15, davidedmundson wrote:
In [1]src/daemon/XorgDisplayServer.cpp:
@@ -233,6 +233,23 @@ namespace SDDM {
// log message
qDebug() << "Display server stopped.";
et();QString displayStopCommand = mainConfig.XDisplay.DisplayStopCommand.g
+// create display setup script processQProcess *displayStopScript = new QProcess();leaks.
Then we have two leaks, as XorgDisplayServer::setupDisplay() does the
same.
Alberto Milone
davidedmundson
reviewed
Apr 2, 2015
| + | ||
| + // start display setup script | ||
| + qDebug() << "Running display stop script " << displayStopCommand; | ||
| + displayStopScript->start(displayStopCommand); |
tseliot
Apr 2, 2015
On 02-04-15 08:56:57, davidedmundson wrote:
In [1]src/daemon/XorgDisplayServer.cpp:
et();QString displayStopCommand = mainConfig.XDisplay.DisplayStopCommand.g
+// create display setup script processQProcess *displayStopScript = new QProcess();
// set process environmentQProcessEnvironment env;env.insert("DISPLAY", m_display);env.insert("HOME", "/");env.insert("PATH", mainConfig.Users.DefaultPath.get());env.insert("SHELL", "/bin/sh");displayStopScript->setProcessEnvironment(env);
// start display setup scriptqDebug() << "Running display stop script " << displayStopCommand;displayStopScript->start(displayStopCommand);should we block for it to finish?
Yes, that would be a good idea. It's been a while since I last used Qt
and QProcess.
Alberto Milone
tseliot
Apr 2, 2015
How about something like this?
From 067beb73065383dd557643e39d7fc859f713a418 Mon Sep 17 00:00:00 2001
From: Alberto Milone <alberto.milone@canonical.com>
Date: Thu, 2 Apr 2015 18:24:18 +0200
Subject: [PATCH 1/1] src/daemon/XorgDisplayServer.cpp: wait for
DisplayStopCommand to finish
Also get rid of two memory leaks
---
src/daemon/XorgDisplayServer.cpp | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/daemon/XorgDisplayServer.cpp b/src/daemon/XorgDisplayServer.cpp
index 4f75be9..8fbfc1f 100644
--- a/src/daemon/XorgDisplayServer.cpp
+++ b/src/daemon/XorgDisplayServer.cpp
@@ -250,6 +250,14 @@ namespace SDDM {
qDebug() << "Running display stop script " << displayStopCommand;
displayStopScript->start(displayStopCommand);
+ // wait for finished
+ if (!displayStopScript->waitForFinished(5000))
+ displayStopScript->kill();
+
+ // clean up the script process
+ displayStopScript->deleteLater();
+ displayStopScript = nullptr;
+
// clean up
process->deleteLater();
process = nullptr;
@@ -279,6 +287,10 @@ namespace SDDM {
// start display setup script
qDebug() << "Running display setup script " << displayCommand;
displayScript->start(displayCommand);
+
+ // clean up the script process
+ displayScript->deleteLater();
+ displayScript = nullptr;
}
void XorgDisplayServer::changeOwner(const QString &fileName) {
--
1.9.1
davidedmundson
Apr 8, 2015
Owner
that won't work because then you're deleting the displayScript startup script potentially before it's finished.
in this case it kinda leaked for a reason... though a terrible one.
you'd need something like
connect(process, finished, process, deleteLater()));
or use QProcess::startDetatched which does it all internally.
|
Thanks for looking into this. |
tseliot
commented
Apr 10, 2015
|
I got the code to work exactly the way I wanted in the last commit. I connected the signal as you suggested in order to free displayScript. Furthermore we now wait for displayStopScript to finish. As a result, I can easily switch between GPUs in Ubuntu now. |
added a commit
that referenced
this pull request
Apr 10, 2015
davidedmundson
merged commit a894e39
into
sddm:master
Apr 10, 2015
1 check passed
tseliot
commented
Apr 10, 2015
|
Thanks a lot! |
tseliot commentedApr 2, 2015
The DisplayStopCommand entry allows executing a script right after stopping X.
This is relevant to the following feature request:
#393