aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/valgrind/valgrindrunner.cpp
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-06-04 12:10:11 +0200
committerhjk <hjk@qt.io>2019-06-04 13:37:01 +0000
commitda6f4901f0b0a417979fa123ae9bc5c1ed43fc2a (patch)
tree623f10e0cc0beaf2b557d29dec8bad2024a5e20f /src/plugins/valgrind/valgrindrunner.cpp
parentcce76afcff377873e46611dc3f00bd3909e0ca21 (diff)
Valgrind: Shuffle code
The original idea was to make that use Utils::FilePath, but it looks like the code is not ready for that yet. Change-Id: Ib5466257049675fcbf19abd115ba58a78b45e484 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/valgrind/valgrindrunner.cpp')
-rw-r--r--src/plugins/valgrind/valgrindrunner.cpp82
1 files changed, 41 insertions, 41 deletions
diff --git a/src/plugins/valgrind/valgrindrunner.cpp b/src/plugins/valgrind/valgrindrunner.cpp
index 587c2cb7d8..f99a4847a0 100644
--- a/src/plugins/valgrind/valgrindrunner.cpp
+++ b/src/plugins/valgrind/valgrindrunner.cpp
@@ -46,7 +46,7 @@ class ValgrindRunner::Private : public QObject
public:
Private(ValgrindRunner *owner) : q(owner) {}
- void run();
+ bool run();
void handleRemoteStderr(const QString &b);
void handleRemoteStdout(const QString &b);
@@ -80,8 +80,44 @@ public:
bool disableXml = false;
};
-void ValgrindRunner::Private::run()
+bool ValgrindRunner::Private::run()
{
+ if (!localServerAddress.isNull()) {
+ if (!q->startServers())
+ return false;
+
+ bool enableXml = !disableXml;
+
+ QStringList arguments = {"--child-silent-after-fork=yes"};
+
+ auto handleSocketParameter = [&enableXml, &arguments](const QString &prefix, const QTcpServer &tcpServer)
+ {
+ QHostAddress serverAddress = tcpServer.serverAddress();
+ if (serverAddress.protocol() != QAbstractSocket::IPv4Protocol) {
+ // Report will end up in the Application Output pane, i.e. not have
+ // clickable items, but that's better than nothing.
+ qWarning("Need IPv4 for valgrind");
+ enableXml = false;
+ } else {
+ arguments << QString("%1=%2:%3").arg(prefix).arg(serverAddress.toString())
+ .arg(tcpServer.serverPort());
+ }
+ };
+
+ handleSocketParameter("--xml-socket", xmlServer);
+ handleSocketParameter("--log-socket", logServer);
+
+ if (enableXml)
+ arguments << "--xml=yes";
+
+ // FIXME: Unclear why this changes the stored data.
+ m_valgrindArguments = arguments + m_valgrindArguments;
+ }
+
+ m_valgrindProcess.setProcessChannelMode(channelMode);
+ // consider appending our options last so they override any interfering user-supplied options
+ // -q as suggested by valgrind manual
+
connect(&m_valgrindProcess, &ApplicationLauncher::processExited,
this, &ValgrindRunner::Private::closed);
connect(&m_valgrindProcess, &ApplicationLauncher::processStarted,
@@ -120,6 +156,8 @@ void ValgrindRunner::Private::run()
m_valgrindProcess.start(valgrind);
else
m_valgrindProcess.start(valgrind, m_device);
+
+ return true;
}
void ValgrindRunner::Private::handleRemoteStderr(const QString &b)
@@ -272,47 +310,9 @@ void ValgrindRunner::waitForFinished() const
loop.exec();
}
-static void handleSocketParameter(const QString &prefix, const QTcpServer &tcpServer,
- bool *useXml, QStringList *arguments)
-{
- QHostAddress serverAddress = tcpServer.serverAddress();
- if (serverAddress.protocol() != QAbstractSocket::IPv4Protocol) {
- // Report will end up in the Application Output pane, i.e. not have
- // clickable items, but that's better than nothing.
- qWarning("Need IPv4 for valgrind");
- *useXml = false;
- } else {
- *arguments << QString("%1=%2:%3").arg(prefix).arg(serverAddress.toString())
- .arg(tcpServer.serverPort());
- }
-}
-
bool ValgrindRunner::start()
{
- if (!d->localServerAddress.isNull()) {
- if (!startServers())
- return false;
-
- bool enableXml = !d->disableXml;
-
- QStringList arguments = {"--child-silent-after-fork=yes"};
-
- handleSocketParameter("--xml-socket", d->xmlServer, &enableXml, &arguments);
- handleSocketParameter("--log-socket", d->logServer, &enableXml, &arguments);
-
- if (enableXml)
- arguments << "--xml=yes";
-
- d->m_valgrindArguments = arguments + d->m_valgrindArguments;
- }
-
- d->m_valgrindProcess.setProcessChannelMode(d->channelMode);
- // consider appending our options last so they override any interfering user-supplied options
- // -q as suggested by valgrind manual
- d->m_valgrindExecutable = d->m_valgrindExecutable;
- d->run();
-
- return true;
+ return d->run();
}
void ValgrindRunner::processError(QProcess::ProcessError e)